在Groovy中将字符串转换为int


286

我有一个String代表整数的值,想将其转换为int。有与Java相当的常规功能Integer.parseInt(String)吗?


1
为什么不只使用def关键字?
无所不在的

4
我有一个包含整数的字符串参数。如果我以后将i用作整数,则使用def i = string_parameter会导致类强制转换异常。
Steve Kuo

Answers:


492

使用toInteger()方法将a转换StringInteger,例如

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.StringGroovyMethodsGroovy 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

19
注意警告:您需要先检查该值isInteger(),因为toInteger()如果字符串不是数字,则会抛出异常。同样适用于toFloat()/isFloat()
安德烈斯Kievsky

8
2.1.6 API文档中,不推荐使用isInteger / toInteger。那么,目前最好的方法是什么?
pakman

1
使用Integer paramValue = params.int('paramName')并不是null安全的。如果在参数映射中没有名称为“ paramName”的参数,您将收到一个关于不能将null强制转换为int的异常。
迈克尔

2
只是想补充一点,因为Groovy 1.8 int确实是int。由于装箱,Groovy仍将显示Integer类,但是例如,您将无法分配nullint,这在1.0中是可能的。我们认为更改并不重要,因为您已经不能将null用作类型的方法调用参数的参数int。这仍然与Java不同,因为在Java中,您无法通过简单的赋值将Integer转换为Long或使用Long调用int接受方法。
blackdrag 2015年

1
@pakman StringGroovyMethods.isInteger(String)DefaultGroovyMethods.isInteger(CharSequence)已弃用,而赞成StringGroovyMethods.isInteger(CharSequence)。同样适用toInteger()
bmaupin

67

有几种方法可以做到,这是我的最爱:

def number = '123' as int

10
与上述相同的问题,如果字符串不是数字,则将引发异常。isInteger()首先检查。
2011年

12
@ank这个问题问一个等效的Integer.parseInt(String)也抛出一个异常,如果该字符串不是一个数字,所以给出的问题,我不认为这是一个“问题”
多纳尔

30

作为附录唐的回答,不仅不会增加常规.toInteger()方法StringS,它也增加了toBigDecimal()toBigInteger()toBoolean()toCharacter()toDouble()toFloat()toList(),和toLong()

同样,如果可以将相关问题解析为相关格式,groovy也会is*在所有返回true的结果String中添加等价物。

相关的GDK页面在这里。


8
这是正确的答案-首先检查isInteger(),然后再做toInteger()...,除非您宁愿添加try/ catch块:),但为此使用异常是个坏主意。
2011年

2
@anktastic我认为,我的回答是比较正确的,因为这个问题问“一个Groovy相当于Java的的Integer.parseInt(字符串)”,即一个未经检查的转换
多纳尔

25

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

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

要么

def num = mystring?.isFloat() ? mystring.toFloat() : null

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


2
+1最佳解决方案IMO,因为它除了转换前的类型检查外还包括空检查
kaskelotti 2013年

我建议不要使用浮点数或双精度数,因为它们本质上是不准确的。正如Groovy使得使用BigDecimals像使用其他Number一样容易,如果您需要比Integer更高的精度,请使用它。其次,这种方法似乎很安全,但是结果可能是num == null,因此您需要注意
Hans Bogaards

对于第一个示例代码,我想您想编写mystring.toInteger()而不是mystring.toFloat()。所以def num = mystring?.isInteger() ? mystring.toInteger() : null是正确的。
Sk8erPeter '19

15

好吧,Groovy接受Java形式就好了。如果您询问是否有Groovier方式,则有一种方法可以前往Integer

两者都显示在这里:

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

5
当字符串不是数字时,也会抛出此答案-注意!
2011年

6

您也可以进行静态导入

import static java.lang.Integer.parseInt as asInteger

然后使用

String s = "99"
asInteger(s)

整洁,我忘记了很多小事情。
魔术章鱼缸


2

实现此目的的几种方法。例子如下

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

希望这可以帮助


1
这如何为现有的8个答案中尚未出现的问题添加任何内容?
LukeG '17

我的坏东西,在这里有点贪婪
Darth Shekhar,




0

使用方法仍然应该是toInteger(),因为它实际上并未被弃用。

int value = '99'.toInteger()

不推荐使用String版本,但是CharSequence是String实现的接口。因此,使用String是可以的,因为即使该方法仅适用于CharSequence,您的代码仍然可以使用。isInteger()也一样

请参阅此问题以供参考: 如何将String转换为CharSequence?

我评论说,因为不赞成使用此方法的概念使我感到困惑,我想避免对其他人使用。


-1

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

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

现在,“ i”拥有整数值。


4
这对现有答案有什么作用?9年前发布的已接受答案以“使用该toInteger()方法转换...
默认语言环境,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.