Groovyで文字列をintに変換する


286

私が持っているString整数値を表しているのとに変換したいと思いますint。Javaに相当するグルーヴィーなものはありますInteger.parseInt(String)か?


1
defキーワードを使用しないのはなぜですか?
遍在

4
整数を含む文字列パラメーターがあります。def i = string_parameterを使用すると、後でiをintとして使用すると、クラスキャスト例外が発生します。
スティーブKuo

回答:


492

toInteger()メソッドを使用してa Stringをに変換しますInteger。例:

int value = "99".toInteger()

非推奨のメソッド(以下を参照)の使用を回避する代替方法は、

int value = "66" as Integer

変換を実行する前に変換String できるかどうかを確認する必要がある場合は、

String number = "66"

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

サポート終了の更新

Groovyの最近のバージョンでは、toInteger()メソッドの1つ が非推奨になりました。以下はorg.codehaus.groovy.runtime.StringGroovyMethodsGroovy 2.4.4 からの引用です。

/**
 * 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

19
警告エンプター:文字列が数値でない場合は例外をスローするisInteger()ため、最初に値を確認する必要toInteger()があります。同じことがtoFloat()/にも当てはまりますisFloat()
Andres Kievsky

8
では2.1.6 APIドキュメント isInteger / toInteger廃止されました。これを行う現在の最善の方法は何ですか?
pakman 2013

1
ただし、Integer paramValue = params.int( 'paramName')の使用はnullセーフではありません。paramマップに「paramName」という名前のparamがない場合、nullをintにキャストできないという例外が発生します。
Michael

2
ちょうどGroovyの1.8以降ことを、追加したいint確かですint。ボックス化のため、Groovyは引き続きIntegerクラスを表示しますが、たとえば、1.0で可能だっnullたに割り当てることはできませんint。typeのメソッド呼び出しパラメーターの引数としてnullを使用することはできなかったため、変更は重要ではないと考えましたint。これは、Javaとはまだすべて異なります。Javaでは、単純な代入によってIntegerをLongに変換したり、Longを使用してint取得メソッドを呼び出したりすることはできません。
ブラックドラッグ

1
@pakman StringGroovyMethods.isInteger(String)およびDefaultGroovyMethods.isInteger(CharSequence)は非推奨ですStringGroovyMethods.isInteger(CharSequence)。同じことが当てはまりますtoInteger()
bmaupin 2015

67

それを行ういくつかの方法、これは私のお気に入りです:

def number = '123' as int

10
上記と同じ問題で、文字列が数値でない場合は例外がスローされます。isInteger()まず確認してください。
Andres Kievsky

12
@ank質問は相当を求めたInteger.parseInt(String)文字列が、そう疑問を考えると、私はこの「問題」を検討していない、数ではない場合も例外をスローした
ドナル・

30

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

同じ静脈では、グルーヴィーにも追加されますis*これらのことリターンのすべてにeqivalentsをtrue場合String、問題のフォーマットを問題のフォーマットに解析できるします。

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


8
これが正解isInteger()ですtoInteger()。まずでチェックしてから実行してください。つまり、try/ catchブロックを追加したくない場合を除きます:)しかし、これに例外を使用することはお勧めできません。
Andres Kievsky

2
@anktastic私は質問は、「JavaのInteger.parseInt(String)をのグルーヴィー相当」のために、すなわち未チェックの変換尋ねたので、私の答えは、より正確であると主張するだろう
ドナル・

25

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

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

または

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

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


2
変換前の型チェックに加えてnullチェックが含まれるため、+ 1の最良のソリューションIMO
kaskelotti 2013

floatやdoubleは本質的に不正確なので、使用しないことをお勧めします。GroovyではBigDecimalを他のNumberと同じくらい簡単に使用できるため、Integerよりも高い精度が必要な場合は、それを使用してください。第二に、このアプローチは安全に思えますが、結果はnum == nullになる可能性があるため、注意する必要があります
Hans Bogaards

最初のサンプルコードでは、のmystring.toInteger()代わりに記述したいと思いますmystring.toFloat()。だからdef num = mystring?.isInteger() ? mystring.toInteger() : null正しいでしょう。
Sk8erPeter

15

そうですね、GroovyはJavaフォームを問題なく受け入れます。Groovierの方法があるかどうかを尋ねる場合は、にアクセスする方法がありIntegerます。

両方をここに示します。

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

5
この回答は、文字列が数値ではない場合にもスローされます-注意してください!
Andres Kievsky

6

また、静的インポートを行うことができます

import static java.lang.Integer.parseInt as asInteger

そしてこの使用後

String s = "99"
asInteger(s)

きちんと、私は細かいことをたくさん忘れます。
Magic Octopus Urn


2

これを実現するいくつかの方法。例は以下の通りです

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

お役に立てれば


1
これは、8つの既存の回答にまだ存在しない質問にどのように追加されますか?
LukeG 2017

私の悪い、ここで少し貪欲になった
ダースシェカール




0

実際には非推奨ではないため、使用方法はtoInteger()のままにする必要があります。

int value = '99'.toInteger()

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

参照用のこの質問を参照してください: 文字列をCharSequenceに変換する方法?

私はコメントしました。なぜなら、この方法での非推奨の概念は私を混乱させ、他の人にはそれを避けたいからです。


-1

Groovyで文字列を整数に変換するより簡単な方法は次のとおりです...

String aa="25"
int i= aa.toInteger()

現在、「i」は整数値を保持しています。


4
これは既存の回答に何を追加しますか?9年前に投稿された承認済みの回答は、「次のtoInteger()方法で変換します...
デフォルトロケール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.