我有一个代表整数值的String
,希望将其转换为int
。是否有Groovy等效于Java的Integer.parseInt(String)
?
我有一个代表整数值的String
,希望将其转换为int
。是否有Groovy等效于Java的Integer.parseInt(String)
?
toInteger()
方法将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()
方法已被废弃。以下内容摘自 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
toInteger()
之前,您需要先使用isInteger()
方法检查值,因为如果字符串不是数字,toInteger()
会抛出异常。同样的规则适用于toFloat()
/isFloat()
方法。 - Andres Kievskyint
的确就是 int
。由于装箱,Groovy仍会显示Integer类,但例如您将不能将 null
分配给 int
,相比1.0版本,这个变更被认为是非关键的。因为您已经不能将null用作类型为 int
的方法调用参数的参数。这仍然与Java不同,因为在Java中,您无法通过简单的赋值将Integer转换为Long,或使用Long调用接受int参数的方法。 - blackdragStringGroovyMethods.isInteger(String)
和 DefaultGroovyMethods.isInteger(CharSequence)
已被弃用,推荐使用 StringGroovyMethods.isInteger(CharSequence)
。toInteger()
同样如此。 - bmaupin有几种方法可以实现,以下是我最喜欢的方法:
def number = '123' as int
isInteger()
进行检查。 - Andres KievskyInteger.parseInt(String)
等效的方法,如果字符串不是数字,则还会抛出异常。因此,根据问题描述,我认为这并不是一个“问题”。 - DónalisInteger()
进行检查,然后再进行 toInteger()
转换……除非你更愿意添加 try
/catch
块 :) 但是,对于这个问题使用异常是不好的做法。 - Andres Kievsky我不确定它是否在最近的 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
才是正确的写法。 - Sk8erPeter好的,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')