2010-01-23 119 views
3
public static String[] removeString (String[] original) { 
    String[] newString; 
    List<String> list = new ArrayList<String>(Arrays.asList(original)); 

    list.remove(0); 
    newString = list.toArray(original); 
    return newString; 
} 

我想使用上面的代碼從字符串數組中刪除第一個字符串;然而,似乎雖然我成功從數組中刪除了第一個字符串,但我還是將數組中的最後一個字符串設置爲null。我怎樣才能使陣列本身更短?從字符串數組中刪除空字符串

+0

近評論我所知道的,該代碼應該工作...也許使用引用數組列表,而不是直接的List接口。 – 2010-01-23 22:33:35

+0

這很奇怪...我的其他評論去了哪裏? *劃痕頭* – 2010-01-23 22:57:32

+0

@Alcon:失去元?因爲這個問題首先在那裏發佈。我的答案在那裏丟失: -/ – 2010-01-23 23:16:28

回答

4

更改您的倒數第二,一個線:

NewString = list.toArray(new String[list.size()]); 

toArray(..)方法將作爲一個參數,它試圖以填補列表數據的列表。您正在傳遞一個長度爲3的列表,因此最後一個元素保持爲空。根據我的建議,您可以使用列表的新大小創建一個新陣列。

作爲旁註:我建議您重新訪問您的命名約定。根據recommended naming conventions您的方法和變量名稱應以小寫字母開頭

更新:但您最好使用其他人建議的Arrays.copyOfRange(..)

+0

謝謝!這很好。 謝謝你告訴我aobut的命名約定太:) – wrongusername 2010-01-23 22:56:47

+0

我可以問你爲什麼使用數組? – 2010-01-23 23:08:19

+0

問這個問題下面的問題,因此它更有可能被作者看到。雖然,這個問題不太相關:) – Bozho 2010-01-23 23:11:19

4

你會想要使用java.util.ArraysT[] copyOfRange(T[] original, int from, int to)method

public static String[] RemoveString (String[] Original) { 
    return Arrays.copyOfRange(original, 1, original.length); 
} 
+0

謝謝...那工作太:) – wrongusername 2010-01-23 23:03:18

+0

(+1)確實,一個優雅的解決方案 – Bozho 2010-01-23 23:07:11

+0

只是一個注意任何想要使用copyOfRange的人:這個方法從Java 1.6開始就可用。 – sateesh 2010-01-24 08:06:57

0

問題是,因爲你的新數組比舊數組小,新數組被複制到舊數組中。其餘的字段然後填充null。這是醜陋的,但會解決你的問題:

public static String[] RemoveString (String[] Original) { 
    List<String> list = new ArrayList<String>(Arrays.asList(Original)); 

    list.remove(0); 
    return list.toArray(new String[0]); 
} 

編輯 或者做什麼Bozho說,他的代碼是更好的。

編輯2種 變化,以適應下面

+0

你怎麼知道原件比一個長?爲什麼它不能有長度1?你的代碼會返回一個大小爲1的數組,這顯然是不正確的。爲什麼不傳遞一個新的String [0] toArray()? – meriton 2010-01-23 22:59:50

+0

我覺得很蠢,你說得對。我停止思考第一個解決方案。 – ddccffvv 2010-01-23 23:31:38