从java中的String数组中删除Null值

Gna*_*air 30 java arrays string

如何从java中的String数组中删除null值?

String[] firstArray = {"test1","","test2","test4",""};
Run Code Online (Sandbox Code Playgroud)

我需要"firstArray"而没有像这样的null(空)值

String[] firstArray = {"test1","test2","test4"};
Run Code Online (Sandbox Code Playgroud)

Viv*_*ath 65

如果你想避免使用fencepost错误并避免移动和删除数组中的项目,这里有一个有点冗长的解决方案,它使用List:

import java.util.ArrayList;
import java.util.List;

public class RemoveNullValue {
  public static void main( String args[] ) {
    String[] firstArray = {"test1", "", "test2", "test4", "", null};

    List<String> list = new ArrayList<String>();

    for(String s : firstArray) {
       if(s != null && s.length() > 0) {
          list.add(s);
       }
    }

    firstArray = list.toArray(new String[list.size()]);
  }
}
Run Code Online (Sandbox Code Playgroud)

添加null以显示空String实例("")和null.之间的区别.

由于这个答案大约是4.5岁,我正在添加一个Java 8示例:

import java.util.Arrays;
import java.util.stream.Collectors;

public class RemoveNullValue {
    public static void main( String args[] ) {
        String[] firstArray = {"test1", "", "test2", "test4", "", null};

        firstArray = Arrays.stream(firstArray)
                     .filter(s -> (s != null && s.length() > 0))
                     .toArray(String[]::new);    

    }
}
Run Code Online (Sandbox Code Playgroud)


Kir*_*oll 18

如果你真的想要从数组添加/删除项目,我可以建议List吗?

String[] firstArray = {"test1","","test2","test4",""};
ArrayList<String> list = new ArrayList<String>();
for (String s : firstArray)
    if (!s.equals(""))
        list.add(s);
Run Code Online (Sandbox Code Playgroud)

然后,如果你真的需要把它放回一个数组:

firstArray = list.toArray(new String[list.size()]);
Run Code Online (Sandbox Code Playgroud)

  • 你说得对,柯克。然而,“NullPointerException”的可能性仍然存在。那是一个错误。 (2认同)

i_a*_*ero 7

似乎没有人提到过使用nonNull方法,该方法也可以streamsJava 8中用于将null(但不为空)删除为:

String[] origArray = {"Apple", "", "Cat", "Dog", "", null};
String[] cleanedArray = Arrays.stream(firstArray).filter(Objects::nonNull).toArray(String[]::new);
System.out.println(Arrays.toString(origArray));
System.out.println(Arrays.toString(cleanedArray));
Run Code Online (Sandbox Code Playgroud)

输出为:

[Apple 、、 Cat,Dog,null]

[苹果,猫,狗]

如果我们也想合并为空,那么我们可以定义一个实用程序方法(在类Utils(说)中):

public static boolean isEmpty(String string) {
        return (string != null && string.isEmpty());
    }
Run Code Online (Sandbox Code Playgroud)

然后使用它来将项目筛选为:

Arrays.stream(firstArray).filter(Utils::isEmpty).toArray(String[]::new);
Run Code Online (Sandbox Code Playgroud)

我相信Apache common也提供了一种StringUtils.isNotEmpty也可以使用的实用方法。