2012-02-12 100 views
1

我有這樣的代碼:如何從'。'分離數字?

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中完成嗎?

+0

這是功課? – 2012-02-12 09:45:22

+0

@AshBurlaczenko:哈哈..不完全..它是我的疑問。我正在解決頂級編碼器中的一個難題。而且你至少給我一個線索,說明我該如何做到這一點。將代碼:) – 2012-02-12 09:48:04

+0

@AshBurlaczenko:我可以遍歷它並放入列表中,直到找到一個'.'並加上它。但我想這種情況會有一些更好的解決方案;) – 2012-02-12 09:51:13

回答

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 
+0

這看起來很類:) – 2012-02-13 00:25:09

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方法

現在,我不知道這是否是你所需要的,因爲我不知道原來的問題。

+0

+1你的想法很好。但是你能解釋一下,你在做什麼? – 2012-02-12 10:26:12