2015-12-29 169 views
0

我試圖從csv字符串轉換的數組中刪除空值。從Java數組中刪除空值

這就是我想要做的。

public class ArrayTest { 

    public static void main(String[] args) { 

     String commaSeparated = "item1,null,item1,null,item3"; 
     String [] items = commaSeparated.split(","); 

     String[] result = removeNull(items); 

     System.out.println(Arrays.toString(result)); 
    } 

    public static String[] removeNull(String[] items) { 
      ArrayList<String> aux = new ArrayList<String>(); 
      for (String elem : items) { 
       if (elem != null) { 
        aux.add(elem); 
       } 
      } 

      return (String[]) aux.toArray(new String[aux.size()]); 
     } 

} 

我仍然得到如下的輸出仍然有空值。能否請你點我有什麼不對這個

[item1, null, item1, null, item3] 
+6

字符串 「空」 是從參考被'null'不同。 –

回答

1

變化

if (elem != null) 

if (!elem.equals("null")) 

.split函數返回一個字符串數組,這樣你預計這些元素null其實不是,它們是"null"的字符串。

+0

謝謝你的工作 – user2628187

+0

不客氣。 –

1

removeNulls()方法,事實上確實刪除空Strings,但是當你在做String.split,你實際上是在創建記得非空String,其值恰好是「空」。

因此改變了...

if (elem != null) { 

對此,考慮到 「空」 ......

if (elem != null && !elem.equalsIgnoreCase("null")) { 
+0

如果OP想要擺脫''NULL''或''Null',考慮''elem''較低的套餐' –

+0

好的呼叫。將「equals」更改爲「equalsIgnoreCase」。 – Todd

+0

@託德謝謝..這是有道理的 – user2628187

0

removeNull(String[])做工精細,它是測試即碎。考慮創建像這樣的測試輸入:

public static void main(String[] args) { 

    String [] items = {"item1",null,"item1",null,"item3"}; 

    String[] result = removeNull(items); 

    System.out.println(Arrays.toString(result)); 
} 

另外,這是一個考慮泛型的好地方。如果你想讓你的方法簽名看起來像這樣T[] removeNull(T[] input)。這可能會爲您提供一些有趣的選項和更多功能的最終產品。

0

與流:

public static void main(String[] args) { 
    String commaSeparated = "item1,null,item1,null,item3"; 
    String[] items = commaSeparated.split(","); 

    String[] result = Arrays.stream(items) 
      .filter(s -> s != null && !s.equals("null")) 
      .toArray(String[]::new); 

    System.out.println(Arrays.toString(result)); 
}