Groovy String to int
我有一个String表示一个整数值,并希望将其转换为int。 是否有一个常规的Java的Integer.parseInt(String)?
-
为什么不直接使用def关键字?
-
我有一个包含整数的字符串参数。 如果我稍后使用i作为int,则使用def i = string_parameter会导致类强制转换异常。
使用toInteger()方法将String转换为Integer,例如
1
| int value ="99". toInteger() |
另一种方法是避免使用不推荐使用的方法(见下文)
如果您需要在执行转换之前检查String是否可以转换,请使用
Grails的
如果您在Grails控制器中转换请求参数,则有更好的方法
这种技术的一个很好的特性是它是安全的,即如果参数不能转换为Integer,它返回null而不是抛出异常。
弃用更新
在最新版本的Groovy中,不推荐使用其中一个toInteger()方法。以下内容摘自Groovy 2.4.4中的org.codehaus.groovy.runtime.StringGroovyMethods
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| /**
* 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 );
} |
您可以使用类似以下内容强制调用方法的非弃用版本:
1
| int num = ((CharSequence )"66"). toInteger() |
就个人而言,我更喜欢:
-
借调和咆哮。
-
警告:你需要先用isInteger()检查值,因为如果字符串不是数字,toInteger()将抛出异常。同样适用于toFloat() / isFloat()
-
在2.1.6 api文档中,不推荐使用isInteger / toInteger。那么目前最好的方法是什么呢?
-
使用Integer paramValue = params.int('paramName')虽然不是null安全的。如果param映射中没有名称为"paramName"的param,则会得到一个关于无法将null转换为int的异常。
-
在Grails中,我输入我的控制器动作参数,例如<5233>。任何绑定错误都将显示在errors对象中,并且将为参数分配默认值。请参阅数据绑定的文档。我相信这直接来自Spring MVC。
-
只是想补充一下,因为Groovy 1.8 int确实是int。由于装箱,Groovy仍将显示Integer类,但您将无法将null分配给int,这在1.0中是可能的。我们认为更改是非关键的,因为您已经无法使用null作为类型int的方法调用参数的参数。这与Java完全不同,因为在Java中,您不能通过简单的赋值将Integer转换为Long或使用Long调用int taking方法。
-
我一直在No such property: isInteger for class: java.lang.String. Stacktrace follows[...]
-
不推荐使用@pakman StringGroovyMethods.isInteger(String)和DefaultGroovyMethods.isInteger(CharSequence),而使用StringGroovyMethods.isInteger(CharSequence)。 toInteger()也是如此。
-
@Hugo听起来像是在离开括号。 '99'.isInteger(),而不是'99'.isInteger。
有几种方法,这是我的最爱:
-
与上面相同的问题,如果字符串不是数字,这将抛出异常。首先检查isInteger()。
-
如果字符串不是一个数字,请问一个等同于Integer.parseInt(String)的问题也会抛出异常,所以考虑到这个问题,我不认为这是一个"问题"
作为Don答案的附录,不仅groovy将.toInteger()方法添加到String s,它还添加toBigDecimal(),toBigInteger(),toBoolean(),toCharacter(),toDouble(),toFloat(), toList()和toLong()。
同样,如果可以将所讨论的String解析为所讨论的格式,那么groovy还会向返回true的所有人添加is*等价物。
相关的GDK页面在这里。
-
这是正确的答案 - 首先使用isInteger()检查,然后执行toInteger() ...即,除非您更愿意添加try / catch块:)但是使用异常是一个坏主意。
-
@anktastic我认为我的答案更正确,因为问题是"一个常规的Java的Integer.parseInt(String)",即未经检查的转换
我不确定它是否是在最新版本的groovy中引入的(初始答案相当陈旧),但现在你可以使用:
1
| def num = mystring ?. isInteger() ? mystring. toFloat() : null |
要么
1
| def num = mystring ?. isFloat() ? mystring. toFloat() : null |
如果提供的字符串不可靠,我建议使用浮点数甚至双精度数而不是整数。
-
+1最佳解决方案IMO,除了转换前的类型检查外,还包括空检查
-
我建议不要使用浮动或双打,因为它们本质上是不准确的。由于Groovy使用BigDecimals像任何其他Number一样简单,如果您需要比Integer更高的精度,请使用它。其次,这种方法似乎是安全的,但结果可能是num == null,所以你需要小心
-
对于第一个示例代码,我想您想要编写mystring.toInteger()而不是mystring.toFloat()。所以def num = mystring?.isInteger() ? mystring.toInteger() : null是正确的。
好吧,Groovy接受Java表单就好了。如果您询问是否存在Groovier方式,则可以转到Integer。
两者都显示在这里:
你也可以进行静态导入
并在此之后使用
toInteger()方法在groovy中可用,你可以使用它。
实现这一目标的几种方法。实例如下
希望这可以帮助
-
这对于现有8个答案中尚未出现的问题有何增加?
-
我的坏,在这里有点贪心
Groovy样式转换:
如果您有请求参数:
使用方法仍然应该是toInteger(),因为它并没有真正弃用。
1
| int value = '99'. toInteger() |
不推荐使用String版本,但CharSequence是String实现的接口。因此,使用String是可以的,因为即使该方法仅适用于CharSequence,您的代码仍然有效。同样适用于isInteger()
请参阅此问题以供参考:
如何将String转换为CharSequence?
我评论说,因为这种方法的弃用概念让我感到困惑,我想为其他人避免这种想法。
这是另一种方式。如果你不喜欢例外。
1 2
| def strnumber ="100"
def intValue = strnumber. isInteger() ? (strnumber as int) : null |
-
我认为这与@Shmaperator的#16877253相同
在Groovy中将字符串转换为整数的更简单方法如下...
现在"我"拥有整数值。
-
这对现有答案有何影响? 9年前发布的接受答案始于:"使用toInteger()方法转换...