Answers:
使用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()
方法已被弃用。以下内容摘自org.codehaus.groovy.runtime.StringGroovyMethods
Groovy 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
isInteger()
,因为toInteger()
如果字符串不是数字,则会抛出异常。同样适用于toFloat()
/isFloat()
int
确实是int
。由于装箱,Groovy仍将显示Integer类,但是例如,您将无法分配null
给int
,这在1.0中是可能的。我们认为更改并不重要,因为您已经不能将null用作类型的方法调用参数的参数int
。这仍然与Java不同,因为在Java中,您无法通过简单的赋值将Integer转换为Long或使用Long调用int接受方法。
StringGroovyMethods.isInteger(String)
和DefaultGroovyMethods.isInteger(CharSequence)
已弃用,而赞成StringGroovyMethods.isInteger(CharSequence)
。同样适用toInteger()
。
作为附录唐的回答,不仅不会增加常规.toInteger()
方法String
S,它也增加了toBigDecimal()
,toBigInteger()
,toBoolean()
,toCharacter()
,toDouble()
,toFloat()
,toList()
,和toLong()
。
同样,如果可以将相关问题解析为相关格式,groovy也会is*
在所有返回true
的结果String
中添加等价物。
相关的GDK页面在这里。
isInteger()
,然后再做toInteger()
...,除非您宁愿添加try
/ catch
块:),但为此使用异常是个坏主意。
我不确定它是不是在groovy的最新版本中引入的(初始答案是相当旧的),但是现在您可以使用:
def num = mystring?.isInteger() ? mystring.toInteger() : null
要么
def num = mystring?.isFloat() ? mystring.toFloat() : null
如果提供的字符串不可靠,我建议使用浮点数或双精度数而不是整数。
mystring.toInteger()
而不是mystring.toFloat()
。所以def num = mystring?.isInteger() ? mystring.toInteger() : null
是正确的。
实现此目的的几种方法。例子如下
a. return "22".toInteger()
b. if("22".isInteger()) return "22".toInteger()
c. return "22" as Integer()
d. return Integer.parseInt("22")
希望这可以帮助
Groovy样式转换:
Integer num = '589' as Integer
如果您有请求参数:
Integer age = params.int('age')
这是另一种方式。如果您不喜欢例外。
def strnumber = "100"
def intValue = strnumber.isInteger() ? (strnumber as int) : null
使用方法仍然应该是toInteger(),因为它实际上并未被弃用。
int value = '99'.toInteger()
不推荐使用String版本,但是CharSequence是String实现的接口。因此,使用String是可以的,因为即使该方法仅适用于CharSequence,您的代码仍然可以使用。isInteger()也一样
请参阅此问题以供参考: 如何将String转换为CharSequence?
我评论说,因为不赞成使用此方法的概念使我感到困惑,我想避免对其他人使用。