Groovy String to int

Ste*_*Kuo 270 groovy

我有一个String表示整数值,并希望将其转换为int.是否有一个常规的Java相当于Integer.parseInt(String)

Dón*_*nal 465

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

int value = "99".toInteger()
Run Code Online (Sandbox Code Playgroud)

另一种方法是避免使用不推荐使用的方法(见下文)

int value = "66" as Integer
Run Code Online (Sandbox Code Playgroud)

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

String number = "66"

if (number.isInteger()) {
  int value = number as Integer
}
Run Code Online (Sandbox Code Playgroud)

Grails的

如果您在Grails控制器中转换请求参数,则有更好的方法

Integer paramValue = params.int('paramName')
Run Code Online (Sandbox Code Playgroud)

这种技术的一个很好的特性是它是安全的,即如果参数不能转换为Integer它,则返回null而不是抛出异常.

弃用更新

在最新版本的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);
}
Run Code Online (Sandbox Code Playgroud)

您可以使用类似以下内容强制调用方法的非弃用版本:

int num = ((CharSequence) "66").toInteger()
Run Code Online (Sandbox Code Playgroud)

就个人而言,我更喜欢:

int num = 66 as Integer
Run Code Online (Sandbox Code Playgroud)

  • 注意事项:你需要首先用`isInteger()`检查值,因为如果字符串不是数字,`toInteger()`将抛出异常.同样适用于`toFloat()`/`isFloat()` (19认同)
  • 在[2.1.6 api文档](http://groovy.codehaus.org/gapi/org/codehaus/groovy/runtime/DefaultGroovyMethods.html)中,不推荐使用isInteger/toInteger.那么目前最好的方法是什么呢? (8认同)
  • 只是想补充一点,因为Groovy 1.8`int`确实是`int`.由于装箱,Groovy仍会显示Integer类,但是你将无法将`null`分配给`int`,这在1.0中是可能的.我们认为更改是非关键的,因为您已经无法使用null作为类型为`int`的方法调用参数的参数.这与Java完全不同,因为在Java中,您无法通过简单赋值将Integer转换为Long或使用Long调用int taking方法. (2认同)

Esk*_*sko 66

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

def number = '123' as int
Run Code Online (Sandbox Code Playgroud)

  • 与上面相同的问题,如果字符串不是数字,这将抛出异常.首先检查`isInteger()`. (10认同)
  • @ank请问相当于`Integer.parseInt(String)`的问题,如果字符串不是数字,它也会抛出异常,所以考虑到问题,我不认为这是一个"问题" (10认同)

Ele*_*hoy 29

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

同样,如果问题可以被解析为有问题的格式,那么groovy还会is*向所有返回的人添加等价数据.trueString

相关的GDK页面在这里.

  • 这是正确的答案 - 首先用`isInteger()`检查,然后执行`toInteger()`...也就是说,除非你宁愿添加`try` /`catch`块:)但是使用异常是个坏主意. (8认同)
  • @anktastic我认为我的答案更正确,因为问题是"一个常见的Java的Integer.parseInt(String)",即未经检查的转换 (2认同)

小智 24

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

def num = mystring?.isInteger() ? mystring.toFloat() : null
Run Code Online (Sandbox Code Playgroud)

要么

def num = mystring?.isFloat() ? mystring.toFloat() : null
Run Code Online (Sandbox Code Playgroud)

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

  • +1最佳解决方案IMO,除了转换前的类型检查外,还包括空检查 (2认同)

Mic*_*ter 15

好吧,Groovy接受Java表单就好了.如果你问是否有Groovier方式,有一种方法可以去Integer.

两者都显示在这里:

String s = "99"
assert 99 == Integer.parseInt(s)
Integer i = s as Integer
assert 99 == i
Run Code Online (Sandbox Code Playgroud)

  • 当字符串不是数字时,这个答案也会抛出 - 小心! (5认同)

And*_*rey 6

你也可以进行静态导入

import static java.lang.Integer.parseInt as asInteger
Run Code Online (Sandbox Code Playgroud)

并在此之后使用

String s = "99"
asInteger(s)
Run Code Online (Sandbox Code Playgroud)