2014-11-25 32 views
1

有一種更好的方法(最好是在SDK),這將取N String對象的現有陣列和追加另一個字符串,以使陣列現在有N + 1字符串對象?看下面我是如何做到的。追加字符串到本地Java陣列

import java.util.Arrays; 

public class StringArrayAppend { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    String[] selectionArgs={"3","2"}; 
    //Is there a SDK method to Arrays.append(selectionArgs,"1");? 


    int newSize=selectionArgs.length+1; 
    int indexNewElem=selectionArgs.length; 
    String[] selectionArgs2=new String[newSize]; 
    System.arraycopy(selectionArgs, 0, selectionArgs2, 0, selectionArgs.length); 
    selectionArgs2[indexNewElem]="1"; 
    selectionArgs=selectionArgs2; 
    selectionArgs2=null; 

    System.out.println("selectionArgs="+Arrays.toString(selectionArgs)); 


} 

}

回答

1

可以在三線做,但整體效率將是相同的:

String[] a = new String[] {"quick", "brown", "fox"}; 

List<String> s = new ArrayList<String>(Arrays.asList(a)); 
s.add("jumps"); 
a = s.toArray(new String[s.size()]); 

System.out.println(Arrays.toString(a)); 

Demo.

但是,當您需要可擴展容器的最佳方法是使用ArrayList<String>

+0

啊這是我正在尋找。我之前用asList(...)嘗試過,但無法弄清楚如何獲得鑄造錯誤。謝謝! – bloodpresage 2014-11-25 04:48:27

+0

但是請注意,這實際上是你的數組的三個副本(而OP代碼只有一個):在ArrayList構造函數中,第二個添加時(因爲容量需要擴展),第三個時候調用toArray。 – Thilo 2014-11-25 05:09:53

1

在JDK沒什麼,我很害怕。

你可以拉在下議院郎,或者只是做一個輔助方法(像在當前的代碼)你自己。

您可以簡化代碼一點通過利用Arrays#copyOf(允許拷貝是一個元素比原來的更長)。

不管你怎麼做,你將結束與一個新的數組。由於數組不能調整大小,所以沒有其他辦法。

+0

感謝您的輸入。不知道該副本是否存在。 – bloodpresage 2014-11-25 04:48:54

1

如果你堅持使用Java數組,我不知道一個優雅的方式來添加一個到另一個,除了像你這樣(創建另一個陣列具有正確大小和簡單地添加新元素的結束數組)。

編輯:我發現使用Apache Commons Lang中圖書館ArrayUtils.addAll(T[], T...)

String[] both = ArrayUtils.addAll(first, second); 

有關使用一個ArrayList如何一行代碼的解決方案? ArrayLists動態調整大小,並允許您簡單地添加元素(使用ArrayList.add(Object o))。

0

據我所知,從短名單的數組轉換爲/,有什麼在JDK中,使該操作更容易。如果您不介意拉動Google's Guava library,則可以使用其ObjectArrays.concat()方法。

從您的示例代碼中的值,它是這樣的:

String[] selectionArgs = {"3", "2"}; 
selectionArgs = ObjectArrays.concat(selectionArgs, "1");