2016-08-02 174 views
1

我需要將動態字符串值附加到具有已知值的新字符串數組。如何使用字符串數組和字符串創建數組

static final String [] ARRAY = {"A","B","C"}; 
String d = "D"; // could be changing dynamically. 

我的問題是將一個值附加到一個帶有動態字符串值的新字符串數組。

我需要這樣的東西。

String [] EXPECTED_ARRAY = {ARRAY, d}; // does not compile. 

預期輸出:(本地字符串數組)

String [] EXPECTED_ARRAY = {"A", "B", "C", d}; 

預先感謝。 BTW:陣列,ArrayList可以很容易地做到這一點。有沒有其他的替代方法。

+0

'ArrayList'就是這樣...順便說一句,在JAVA中,「字符串」是不可改變的...所以在附加後對D值的任何改變都不會反映在數組內容中! –

+0

我不希望一旦創建新數組就會反映出這些值的變化。謝謝。 – Raaam

+0

或者如果你想努力的話,那麼你需要每次創建一個新的數組,這是我想你會遠離 – emotionlessbananas

回答

2

有沒有其他的替代方法?

如果你想添加到數組中的元素(其中有一個固定的大小),你可以做arraycopyArrayList做它內部:

System.arraycopy(src, srcPos, dest, destPos, length); 

或者動態的元素,如果分配更多的空間你確切地知道結果數組的長度:

String[] array = new String[EXPECTED_SIZE]; 

但它是不聰明,因爲ArrayList類已經存在正是爲了這些目的。

+0

沒有其他簡單的方法。沒有人會更喜歡arrayCopy,除非有其他特殊需求。至少在這種情況下,你的回答是正確的。因此標記爲已接受的答案。謝謝。 – Raaam

1

你可以創建你自己的方法像下面

String [] EXPECTED_ARRAY = append(ARRAY, d); 


String[] append(String a[],String str){ 
    String[] b=new String[a.length+1]; 
    int i=0; 
    for(;i<a.length;i++) 
     b[i]=a[i]; 
    b[i]=str; 
    return b;   
} 
0

正則表達式是不是用在這裏是一件好事。用這樣的標準方式:

static final String [] ARRAY = {"A","B","C"}; 
public static void main(String[] args) throws Exception 
{ 

    String d = "D"; // could be changing dynamically. 
    List<String> l = new ArrayList<>(Arrays.asList(ARRAY)); 
    l.add(d); // can add multiple dynamic values. 
    String[] arr = l.toArray(new String[l.size()]); 
    System.out.println(Arrays.toString(arr)); 
} 

方法-2:

String[] arr2 = new String[ARRAY.length + 1]; 
System.arraycopy(ARRAY, 0, arr2, 0, ARRAY.length); 
arr2[arr2.length - 1 ] = d; 
System.out.println(Arrays.toString(arr2)); 

O/P:

[A, B, C, D] 
0

簡單的方法是將值複製到一個新的數組!

static final String[] ARRAY = {"A", "B", "C"}; 

public static void main(String[] args) { 
    String[] EXPECTED_ARRAY = getExpectedArray("D", ARRAY); 
    System.out.println(Arrays.toString(EXPECTED_ARRAY)); 
} 

static String[] getExpectedArray(String addValue, String ... strings) { 
    String [] returnArray = new String[strings.length + 1]; 
    returnArray[returnArray.length - 1] = addValue; 
    System.arraycopy(strings, 0, returnArray, 0, strings.length); 
    return returnArray; 
} 

或最小行代碼的BeanShell:

static final String[] ARRAY = {"A", "B", "C"}; 

public static void main(String[] args) throws Exception { 
    String stringToAppend = "D"; 

    Interpreter interpreter = new Interpreter(); 
    String[] newArrayString = (String[]) interpreter.eval("new String [] {" 
      + Arrays.toString(ARRAY).replaceAll("^\\[|\\]$", "\"") 
        .replaceAll(",", "\",\"") 
      + ",\"" + stringToAppend + "\"" + "}"); 
} 
0

你可以試試這個方法。

String strs[] = {"A","B","C"}; 
List<String> tempList = new ArrayList<>(Arrays.asList(strs)); 
tempList.add("D"); 
strs = tempList.toArray(new String[tempList.size()]); 

如果你想爲此做一個方法。

private static String[] appendArray(String[] sts, String s) 
{ 
    List<String> tempList = new ArrayList<>(Arrays.asList(sts)); 
    tempList.add(s); 
    return (tempList.toArray(new String[tempList.size()])); 
} 

如果您希望在單次調用中使用多個字符串。

private static String[] appendArray(String[] sts, String...s) 
{ 
    List<String> tempList = new ArrayList<>(Arrays.asList(sts)); 
    if (s.length>0) tempList.addAll(Arrays.asList(s)); 
    return (tempList.toArray(new String[tempList.size()])); 
}