在 Groovy 中将字符串转换为 int
Posted
技术标签:
【中文标题】在 Groovy 中将字符串转换为 int【英文标题】:Converting a string to int in Groovy 【发布时间】:2010-12-15 08:52:41 【问题描述】:我有一个代表整数值的String
,我想将其转换为int
。是否有 Java 的 Integer.parseInt(String)
的 groovy 等价物?
【问题讨论】:
为什么不直接使用 def 关键字? 我有一个包含整数的字符串参数。如果我稍后将 i 用作 int,则使用 def i = string_parameter 会导致类转换异常。 【参考方案1】:使用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
【讨论】:
请注意:您需要先检查isInteger()
的值,因为如果字符串不是数字,toInteger()
将抛出异常。同样适用于toFloat()
/isFloat()
在2.1.6 api documentation isInteger/toInteger 中已弃用。那么目前最好的方法是什么?
使用 Integer paramValue = params.int('paramName') 不是空安全的。如果在参数映射中没有名称为“paramName”的参数,您会得到一个异常,即 can't cast null to int。
只是想补充一点,因为 Groovy 1.8 int
确实是 int
。由于装箱,Groovy 仍将显示 Integer 类,但您将无法将 null
分配给 int
,这在 1.0 中是可能的。我们认为更改不是关键的,因为您已经不能使用 null 作为int
类型的方法调用参数的参数。这一切都与 Java 不同,因为在 Java 中,您不能通过简单的赋值将 Integer 转换为 Long 或使用 Long 调用 int 方法。
@pakman StringGroovyMethods.isInteger(String)
和 DefaultGroovyMethods.isInteger(CharSequence)
被 StringGroovyMethods.isInteger(CharSequence)
弃用。 toInteger()
也是如此。【参考方案2】:
有几种方法,这是我最喜欢的:
def number = '123' as int
【讨论】:
和上面一样的问题,如果字符串不是数字的话会抛出异常。请先与isInteger()
联系。
@ank 该问题要求与Integer.parseInt(String)
等效,如果字符串不是数字,它也会抛出异常,所以鉴于这个问题,我不认为这是一个“问题”跨度>
【参考方案3】:
作为Don's answer的补充,groovy不仅给String
s添加了.toInteger()
方法,还添加了toBigDecimal()
、toBigInteger()
、toBoolean()
、toCharacter()
、toDouble()
, toFloat()
、toList()
和 toLong()
。
同样,如果可以将相关的 String
解析为相关格式,则 groovy 还会将 is*
添加到所有返回 true
的等效项。
相关GDK页面is here.
【讨论】:
这是正确的答案 - 首先检查isInteger()
,然后执行 toInteger()
... 也就是说,除非您更愿意添加 try
/catch
块 :) 但是为此使用异常是个坏主意。
@anktastic 我认为我的答案更正确,因为该问题要求“Java 的 Integer.parseInt(String) 的 groovy 等价物”,即未经检查的转换【参考方案4】:
我不确定它是否是在最近版本的 groovy 中引入的(最初的答案相当陈旧),但现在您可以使用:
def num = mystring?.isInteger() ? mystring.toInteger() : null
或
def num = mystring?.isFloat() ? mystring.toFloat() : null
如果提供的字符串不可靠,我建议使用浮点数甚至双精度数而不是整数。
【讨论】:
+1 最佳解决方案 IMO,因为除了转换前的类型检查外,它还包括空值检查 我建议不要使用浮点数或双精度数,因为它们本质上是不准确的。由于 Groovy 使 BigDecimals 的使用与任何其他 Number 一样容易,如果您需要比 Integer 更高的精度,请使用它。其次,这种方法看起来很安全,但结果可能是 num == null,所以你需要小心 对于第一个示例代码,我猜你想写mystring.toInteger()
而不是mystring.toFloat()
。所以def num = mystring?.isInteger() ? mystring.toInteger() : null
是正确的。【参考方案5】:
好吧,Groovy 可以很好地接受 Java 形式。如果你问有没有Groovier的方法,有方法可以去Integer
。
两者都显示在这里:
String s = "99"
assert 99 == Integer.parseInt(s)
Integer i = s as Integer
assert 99 == i
【讨论】:
当字符串不是数字时也会抛出这个答案 - 注意!【参考方案6】:你也可以进行静态导入
import static java.lang.Integer.parseInt as asInteger
在此之后使用
String s = "99"
asInteger(s)
【讨论】:
很好,我忘记了很多小事。【参考方案7】:toInteger()
方法在 groovy 中可用,你可以使用它。
【讨论】:
【参考方案8】:实现这一目标的几种方法。示例如下
a. return "22".toInteger()
b. if("22".isInteger()) return "22".toInteger()
c. return "22" as Integer()
d. return Integer.parseInt("22")
希望对你有帮助
【讨论】:
这如何为 8 个现有答案中尚未出现的问题添加任何内容? 我的错,这里有点贪心【参考方案9】:Groovy 风格转换:
Integer num = '589' as Integer
如果你有请求参数:
Integer age = params.int('age')
【讨论】:
【参考方案10】:def str = "32"
int num = str as Integer
【讨论】:
【参考方案11】:这是另一种方式。如果你不喜欢例外。
def strnumber = "100"
def intValue = strnumber.isInteger() ? (strnumber as int) : null
【讨论】:
我认为这与@Shmaperator#16877253的答案相同【参考方案12】:使用方式应该还是toInteger()
,因为它并没有真正被弃用。
int value = '99'.toInteger()
不推荐使用 String 版本,但 CharSequence
是 String 实现的接口。因此,使用 String 是可以的,因为即使该方法仅适用于 CharSequence
,您的代码仍然有效。 isInteger()
也是如此
请参阅此问题以供参考: How to convert a String to CharSequence?
我发表了评论,因为此方法中弃用的概念让我感到困惑,我想避免对其他人造成这种影响。
【讨论】:
【参考方案13】:在 Groovy 中将字符串转换为整数的更简单方法如下...
String aa="25"
int i= aa.toInteger()
现在“i”持有整数值。
【讨论】:
这对现有答案有什么好处? 9 年前发布的公认答案开头是:“使用toInteger()
方法来转换...以上是关于在 Groovy 中将字符串转换为 int的主要内容,如果未能解决你的问题,请参考以下文章