簡體   English   中英

從Java數組中刪除空值

[英]Remove null values from java array

我正在嘗試從從csv字符串轉換而來的數組中刪除空值。

這就是我想要做的。

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]

更改

if (elem != null) 

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

.split函數返回一個字符串數組,因此您期望為null那些元素實際上不是,它們是"null"字符串。

實際上,您的removeNulls()方法確實刪除了null Strings ,但請記住,當您執行String.split ,實際上是在創建一個非null的String其值恰好是“ null”。

所以改變這個...

if (elem != null) {

為此,要考慮“空” ...

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

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)T[] removeNull(T[] input) 這可能會為您提供一些有趣的選項和更通用的最終產品。

與流:

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));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM