【问题标题】:Groovy: String to integer arrayGroovy:字符串到整数数组
【发布时间】:2018-02-14 13:25:30
【问题描述】:

我在 Groovy 中编码,我有一个字符串参数“X”,如下所示:

899-921-876-123

现在我成功地删除了“-”

replaceAll("-", "")

现在我想将此字符串分成单独的数字 - 到一个数组,例如 (8,9,9...) 以使用这些数字进行一些计算。但不知何故,我不能像这样同时拆分()这个字符串并使其成为整数:

assert X.split("")
def XInt = Integer.parseInt(X)

那么当我尝试类似的事情时:

def  sum = (6* X[0]+ 5 * X[1] + 7 * X[2])

我收到错误消息“找不到匹配的方法 int#getAt(int)。请检查声明的类型是否正确以及该方法是否存在。”或“找不到匹配的方法 int#multiply(java.lang.String)。请检查声明的类型是否正确以及方法是否正确”如果我没有将其转换为整数...

知道如何只计算这个字符串的不同数字吗?

【问题讨论】:

    标签: groovy


    【解决方案1】:
    def X = '899-921-876-123'
    def XInt = X.replaceAll(/\D++/, '').collect { it as int }
    assert XInt == [8, 9, 9, 9, 2, 1, 8, 7, 6, 1, 2, 3]
    assert 6* XInt[0]+ 5 * XInt[1] + 7 * XInt[2] == 6* 8+ 5 * 9 + 7 * 9
    

    replaceAll 删除所有非数字
    collect 遍历可迭代对象并将所有元素转换为 ints
    String 是其字符的可迭代

    【讨论】:

    • 感谢您的建议,但“X”是一个参数,可以动态更新,我给你的数字是一个例子。因此,当我这样做时: def X = X.replaceAll(/\D++/, '').collect { it as int } 它给了我一个错误“不允许在类 java.lang.Object 上收集方法” 怎么能之后我会对其进行任何计算吗?
    • is not permitted 听起来很奇怪,你是不是被困在沙盒里了?我给你的是没有任何沙箱的普通 Groovy。 String#replaceAll 会返回一个 String 来完成替换,如果没有沙箱阻止它,您应该可以调用 collect。还是您的X 实际上不是StringX.getClass() 给你什么?我调整了我的示例以考虑到 X 已经作为参数存在,并向您展示了如何使用它进行计算的示例。
    【解决方案2】:

    假设你已经有了一串数字:

    "123"*.toLong() // or toShort(), toInteger(), ...
    // ===> [1, 2, 3]
    

    【讨论】:

    • split 不是必须的,String 是其字符的可迭代,因此您可以直接使用collect。如果您只有个位数,则转换为 long 有点矫枉过正,并且将 Groovy 魔术与 as ... 一起使用会更好。 ;-)
    • @Vampire 谢谢,改了
    【解决方案3】:

    如果发现@cfrick 方法是最时髦的解决方案。

    这样就完成了:

    def n = "899-921-876-123".replaceAll("-", "")
    print n*.toInteger()
    

    【讨论】:

      猜你喜欢
      • 2021-06-29
      • 2015-05-15
      • 2017-10-29
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多