web-dev-qa-db-ja.com

Groovyの文字列からintへ

整数値を表すStringがあり、それをintに変換したいと思います。 JavaのInteger.parseInt(String)と同等の優れたものはありますか?

248
Steve Kuo

StringIntegerに変換するにはtoInteger()メソッドを使います。

int value = "99".toInteger()

推奨されない方法(下記参照)の使用を回避する別の方法は、

int value = "66" as Integer

変換を実行する前にStringcanが変換されるかどうかを確認する必要がある場合は、

String number = "66"

if (number.isInteger()) {
  int value = number as Integer
}

Grails

Grailsコントローラのリクエストパラメータを変換しているなら、もっと良い方法があります。

Integer paramValue = params.int('paramName')

このテクニックの素晴らしい機能の1つは安全だということです。つまり、パラメータをIntegerに変換できない場合、例外をスローするのではなくnullを返します。

廃止予定のアップデート

Groovyの最近のバージョンでは、toInteger()メソッドの1つは推奨されていません。以下はGroovy 2.4.4のorg.codehaus.groovy.runtime.StringGroovyMethodsからの抜粋です。

/**
 * Parse a CharSequence into an Integer
 *
 * @param self a CharSequence
 * @return an Integer
 * @since 1.8.2
 */
public static Integer toInteger(CharSequence self) {
    return Integer.valueOf(self.toString().trim());
}

/**
 * @deprecated Use the CharSequence version
 * @see #toInteger(CharSequence)
 */
@Deprecated
public static Integer toInteger(String self) {
    return toInteger((CharSequence) self);
}

次のようなひどいことを使って、非推奨バージョンのメソッドを強制的に呼び出すことができます。

int num = ((CharSequence) "66").toInteger()

個人的には、私は大好きです:

int num = 66 as Integer
438
Dónal

いくつかの方法がありますが、これが私のお気に入りです。

def number = '123' as int
63
Esko

補遺 ドンの答え として、グルーヴィーはStringsに.toInteger()メソッドを追加するだけでなく、それはまた、追加toBigDecimal()toBigInteger()toBoolean()toCharacter()toDouble()toFloat()toList()、およびtoLong()

同様に、問題のtrueを問題のフォーマットに解析できる場合、groovyはStringを返すものすべてにis*同等物も追加します。

関連するGDKページ こちらです

29
Electrons_Ahoy

それが最近のバージョンのgroovyで導入されたのかどうかはわかりません(最初の答えはかなり古いです)が、今では次のものを使用できます。

def num = mystring?.isInteger() ? mystring.toFloat() : null

または

def num = mystring?.isFloat() ? mystring.toFloat() : null

提供された文字列が信頼できない場合は、整数の代わりに浮動小数点数または倍精度値を使用することをお勧めします。

24
Shmaperator

さて、GroovyはJavaフォームをうまく受け入れます。 Groovierの方法があるかどうか尋ねているのなら、Integerに行く方法があります。

両方ともここに示されています:

String s = "99"
assert 99 == Integer.parseInt(s)
Integer i = s as Integer
assert 99 == i
15
Michael Easter

静的インポートをすることもできます

import static Java.lang.Integer.parseInt as asInteger

そしてこの使用の後

String s = "99"
asInteger(s)
6
Andrey

toInteger()メソッドはgroovyで利用可能です、あなたはそれを使うことができます。

3
Aakarsh Gupta

これを達成するためのいくつかの方法。例は以下の通りです

a. return "22".toInteger()
b. if("22".isInteger()) return "22".toInteger()
c. return "22" as Integer()
d. return Integer.parseInt("22")

お役に立てれば

2
Darth Shekhar
def str = "32"

int num = str as Integer
1
ratzip

Groovyスタイル変換:

Integer num = '589' as Integer

リクエストパラメータがある場合:

Integer age = params.int('age')
1

使う方法はまだtoInteger()であるべきです、なぜならそれは本当に非推奨ではないからです。

int value = '99'.toInteger()

Stringバージョンは非推奨ですが、CharSequenceはStringが実装するインタフェースです。そのため、Stringを使用しても問題ありません。メソッドがCharSequenceでしか機能しない場合でも、コードは機能するためです。 isInteger()についても同様です。

参照用にこの質問を参照してください: どのように文字列をCharSequenceに変換しますか?

私はコメントしました、なぜなら、この方法では廃止予定の概念は私を混乱させ、他の人たちには避けたいのです。

0
Math Morn

これは他の方法です。あなたが例外を好きではないならば。

def strnumber = "100"
def intValue = strnumber.isInteger() ?  (strnumber as int) : null
0