2010-05-26 29 views
0

我在Groovy類一個字符串數組(參數到主法):如何使用Groovy將一個字符串數組中的子集複製到一個整數數組中?

String[] args 

我想的第三轉換爲最後一個元素到整數的一個新的數組。是否有更簡單的方法在Groovy比其他要做到這一點:

final int numInts = args.length - 2 
final int [] intArray = new int[numInts] 
for (int i = 2; i < args.length; i++) { 
    intArray[i-2]=Integer.parseInt(args[i]) 
} 

我想做的事:

final int numInts = args.length - 2 
final int [] intArray = new int[numInts] 
System.arraycopy(args, 2, intArray, 0, numInts) 

但它拋出一個類轉換異常。

謝謝!

回答

4

這是我的解決方案:

def intArray = args[2..-1].collect { it as int } as int[] 

2..-1範圍選擇從3日到最後所有元素。 collect方法使用閉包中的代碼來轉換數組的每個元素。最後的as int[]將由collect方法產生的整數列表轉換爲整數數組。由於Groovy不支持原始類型,因此int將始終保存爲java.lang.Integer,但您可以使用它們,就好像它們是Java基本類型一樣。從List到數組的轉換是可選的。由於Collections是Groovy中的第一類公民,並且在Java中工作起來要容易得多,所以我寧願直接使用Lists而不是數組。

編輯: 或者,你可以用所謂的spread operator*.更換collect方法,但你必須使用的方法,而不是asType(int)的短版as int

def intArray = args[2..-1]*.asType(int) as int[] 
+0

酷,謝謝! – Cuga 2010-05-31 02:03:50

0

對於您的替代方案 - 您嘗試將String對象複製到整數。這是不可能的,你得到你應得的 - 一個ClassCastException ;-)

至少在Java - System.arraycopy只適用於兼容的數組類型。

你的第一種方法並不差。如果代碼看起來太醜陋,只是把它藏在與像簽名的私有方法:

private int[] parseStrings(String[] args, int start); 
相關問題