在Groovy中将字符串转换为int

在Groovy中将字符串转换为int,groovy,Groovy,我有一个表示整数值的字符串,希望将其转换为int。是否有Java的Integer.parseInt(String)的groovy等价物?好吧,groovy很好地接受Java形式。如果您询问是否有更为Groovier的方法,那么有一种方法可以转到Integer 两者都显示在这里: String s = "99" assert 99 == Integer.parseInt(s) Integer i = s as Integer assert 99 == i 有几种方法,这是我最喜欢的: def n

我有一个表示整数值的
字符串
,希望将其转换为
int
。是否有Java的
Integer.parseInt(String)
的groovy等价物?

好吧,groovy很好地接受Java形式。如果您询问是否有更为Groovier的方法,那么有一种方法可以转到
Integer

两者都显示在这里:

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

有几种方法,这是我最喜欢的:

def number = '123' as int
使用
toInteger()
方法将
字符串
转换为
整数
,例如

int value = "99".toInteger()
另一种避免使用不推荐使用的方法(见下文)是

如果在执行转换之前需要检查
字符串
是否可以转换,请使用

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
作为对的补充,groovy不仅在
字符串中添加了
.toInteger()
方法,还添加了
toBigDecimal()
toBigInteger()
toBoolean()
toCharacter()
toDouble()
toFloat()
toList()
、以及
toLong()

同样,groovy还将
is*
eqivalent添加到所有返回
true
的值中,前提是所讨论的
字符串可以解析为所讨论的格式


相关的GDK页面

我不确定它是否是在groovy的最新版本中引入的(最初的答案相当旧),但现在您可以使用:

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


如果提供的字符串不可靠,我建议使用浮点数,甚至双精度,而不是整数。

也可以进行静态导入

import static java.lang.Integer.parseInt as asInteger
使用后呢

String s = "99"
asInteger(s)

toInteger()
方法在groovy中可用,您可以使用它。

groovy样式转换:

Integer num = '589' as Integer
如果您有请求参数:

Integer age = params.int('age')

实现这一点的几种方法。例子如下

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

希望这有帮助,这里是另一种方法。如果你不喜欢例外

def strnumber = "100"
def intValue = strnumber.isInteger() ?  (strnumber as int) : null

使用的方法仍然应该是
toInteger()
,因为它并没有真正被弃用

int value = '99'.toInteger()
字符串版本已被弃用,但
CharSequence
是字符串实现的接口。因此,使用字符串是可以的,因为即使该方法仅适用于
CharSequence
,代码仍然可以工作。
isInteger()也是如此。

参考此问题:


我发表了评论,因为这个方法中不推荐的概念让我感到困惑,我想避免其他人这样做。

在Groovy中将字符串转换为整数的简单方法如下

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

现在“i”保存整数值。

为什么不使用def关键字呢?我有一个包含整数的字符串参数。使用def i=string_参数会导致类强制转换异常,如果我以后使用i作为int。注意:您需要首先使用
isInteger()
检查该值,因为
toInteger()
将在字符串不是数字时引发异常。不推荐使用isInteger/toInteger中的
toFloat()
/
isFloat()
。那么,目前最好的方法是什么呢?不过,使用整型paramValue=params.int('paramName')不是空安全的。如果param映射中没有名为“paramName”的param,则会出现一个异常,关于不能将null强制转换为int。只想添加一点,因为Groovy 1.8
int
确实是
int
。由于装箱的原因,Groovy仍将显示Integer类,但例如,您将无法将
null
赋值给
int
,这在1.0中是可能的。我们认为更改是非关键性的,因为您已经不能使用null作为
int
类型的方法调用参数的参数。这仍然与Java不同,因为在Java中,您不能通过简单赋值将整数转换为Long,也不能使用Long调用int-taking方法。@pakman
StringGroovyMethods.isInteger(String)
DefaultGroovyMethods.isInteger(CharSequence)
被弃用以支持。对于
toInteger()
,也存在同样的问题。与上述问题相同,如果字符串不是数字,则会引发异常。首先检查.<代码> IsIngEnter(<)/>代码> @问一个等价于<代码>整数.PARSETIN(String)的问题,如果字符串不是一个数,它也会抛出一个异常,所以给出问题,我不认为这是“问题”,当字符串不是数字时,这个答案也会抛出!这是正确答案-先用
isInteger()
检查,然后执行
toInteger()
。。。也就是说,除非您想添加
try
/
catch
块:),否则使用异常是个坏主意。@anktastic我认为我的答案更正确,因为这个问题要求的是“Java的Integer.parseInt(String)的groovy等价物”,例如,未经检查的转换+1最佳解决方案,因为除了转换前的类型检查外,它还包括空检查。我建议不要使用浮点或双精度,因为它们本身就不准确。Groovy使使用大小数和使用其他数字一样简单,如果您需要比整数更高的精度,请使用它。其次,这种方法看起来很安全,但结果可能是num==null,因此您需要小心使用它。对于第一个示例代码,我想您应该编写
mystring.toInteger()
,而不是
mystring.toFloat()
。所以
def num=mystring?.isInteger()?mystring.toInteger():null将是正确的。整洁,我忘记了很多小事情。这怎么会给8个现有答案中尚未出现的问题添加任何内容呢?我的糟糕,有点gr
def str = "32"

int num = str as Integer
String aa="25"
int i= aa.toInteger()
def str = "32"

int num = str as Integer