如何将数字与'。'分开?

时间:2012-02-12 09:40:44

标签: groovy

我有这样的代码:

def a = [".15", "7..", "402", "..3"]
c = a.permutations() as List
println c[0].join()

哪个输出7....3402.15。在这一个中,我只需要获得数字,即7,3402,15。更值得注意的是,我需要总和,即在我们的例子中我们得到7,9,6

如何在groovy中完成这项工作?

2 个答案:

答案 0 :(得分:2)

作为快速回复,一个解决方案是:

def result = [".15", "7..", "402", "..3"].permutations()*. 
  join()*.                                 // Join each permutation together into a single string
  split( '\\.' )*.                         // Split each of these Strings on the '.' char
  findAll()*.                              // Remove empty elements (where we had '..' before splitting)
  collect { it -> it*.toInteger().sum() }  // Convert each String to List<Integer> and sum

答案 1 :(得分:1)

这样的东西? 这不是很好看的代码,但它应该传达意图......

[".15", "7..", "402", "..3"].permutations()*.join()*.replaceAll('\\.\\.*',',')*.split(',')*.collect{it.getChars().inject(0){a,b->a+ (new Integer(b as String))}}

编辑:更改了代码,使其适用于整个排列数组,而不仅仅是一个元素。类型转换很笨重,@ tim_yates代码更清晰。

代码的工作原理如下:

对于排列的每个子数组:

  • 将数组连接到一个字符串
  • 用一个.替换所有后续,
  • ,分开字符串
    • 将此字符串中的所有字符转换为整数,并使用inject方法
    • 添加它们

现在,我不知道这是否是你所需要的,因为我不知道原来的问题。