整数値を表すString
があり、それをint
に変換したいと思います。 JavaのInteger.parseInt(String)
と同等の優れたものはありますか?
String
をInteger
に変換するにはtoInteger()
メソッドを使います。
int value = "99".toInteger()
推奨されない方法(下記参照)の使用を回避する別の方法は、
int value = "66" as Integer
変換を実行する前にString
canが変換されるかどうかを確認する必要がある場合は、
String number = "66"
if (number.isInteger()) {
int value = number as Integer
}
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
いくつかの方法がありますが、これが私のお気に入りです。
def number = '123' as int
それが最近のバージョンのgroovyで導入されたのかどうかはわかりません(最初の答えはかなり古いです)が、今では次のものを使用できます。
def num = mystring?.isInteger() ? mystring.toFloat() : null
または
def num = mystring?.isFloat() ? mystring.toFloat() : null
提供された文字列が信頼できない場合は、整数の代わりに浮動小数点数または倍精度値を使用することをお勧めします。
さて、GroovyはJavaフォームをうまく受け入れます。 Groovierの方法があるかどうか尋ねているのなら、Integer
に行く方法があります。
両方ともここに示されています:
String s = "99"
assert 99 == Integer.parseInt(s)
Integer i = s as Integer
assert 99 == i
静的インポートをすることもできます
import static Java.lang.Integer.parseInt as asInteger
そしてこの使用の後
String s = "99"
asInteger(s)
toInteger()
メソッドはgroovyで利用可能です、あなたはそれを使うことができます。
これを達成するためのいくつかの方法。例は以下の通りです
a. return "22".toInteger()
b. if("22".isInteger()) return "22".toInteger()
c. return "22" as Integer()
d. return Integer.parseInt("22")
お役に立てれば
def str = "32"
int num = str as Integer
Groovyスタイル変換:
Integer num = '589' as Integer
リクエストパラメータがある場合:
Integer age = params.int('age')
使う方法はまだtoInteger()であるべきです、なぜならそれは本当に非推奨ではないからです。
int value = '99'.toInteger()
Stringバージョンは非推奨ですが、CharSequenceはStringが実装するインタフェースです。そのため、Stringを使用しても問題ありません。メソッドがCharSequenceでしか機能しない場合でも、コードは機能するためです。 isInteger()についても同様です。
参照用にこの質問を参照してください: どのように文字列をCharSequenceに変換しますか?
私はコメントしました、なぜなら、この方法では廃止予定の概念は私を混乱させ、他の人たちには避けたいのです。
これは他の方法です。あなたが例外を好きではないならば。
def strnumber = "100"
def intValue = strnumber.isInteger() ? (strnumber as int) : null