2017-09-14 118 views
0

我想將一些字符串數組合併成一個。我用ArrayUtils.addAll(T[], T...)我找到了一些答案here。正如它在那裏描述的,我應該把它轉換成一個String數組。當我嘗試這樣做,就說明我這個錯誤如何將Serializable轉換爲String數組?

Cannot store java.io.Serializable in an array of java.lang.String at org.apache.commons.lang3.ArrayUtils.addAll

我的代碼是在這裏

String[] splitLeft=split(left); 
String[] middle=new String[]{with}; 
String[] splitRight=split(right); 

String[] inWords=(String[])ArrayUtils.addAll(splitLeft,middle,splitRight); 

有什麼問題,我怎樣才能解決這一問題?

Ps:with只是一個字符串。

+0

您使用的是ArraysUtils? https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/ArrayUtils.html#addAll(java.lang.Object [],java.lang.Object []) - 只接受2個數組 –

+2

@BojanPetkovic 3.6上升到11,而不是11,可變參數。 – pvg

+0

我正在使用lang3 –

回答

3

的這裏的問題是,the signature of the method是:

addAll(T[] array1, T... array2) 

所以第二和第三個參數被視爲的array2單個元件:它們不是級聯;因此,推斷類型爲Serializable,它是String(第一個參數的元素類型)和String[](可變參數的元素類型)的最小上界。

相反,你將不得不加入他們的行列中多次調用,如果你要與ArrayUtils.addAll做到這一點:

addAll(addAll(splitLeft, middle), splitRight) 

或者,你可以建立級聯陣列中的一個小語句數量:

// Copy splitLeft, allocating extra space. 
String[] inWords = Arrays.copyOf(splitLeft, splitLeft.length + 1 + splitRight.length); 

// Add the "with" variable, no need to put it in an array first. 
inWords[splitLeft.length] = with; 

// Copy splitRight into the existing inWords array. 
System.arraycopy(splitRight, 0, inWords, splitLength.length + 1, splitRight.length); 
+0

第二個和第三個被視爲單個值? 但是,如何連接2個數組? –

+0

@KristjanKica「相反,你將不得不......」 –

+0

我知道,它現在有效。感謝名單! –

相關問題