Подтвердить что ты не робот

Удалить значение Null из массива String в java

Как удалить нулевое значение из массива String в java?

String[] firstArray = {"test1","","test2","test4",""};

Мне нужен "firstArray" без нулевых (пустых) значений, таких как

String[] firstArray = {"test1","test2","test4"};
4b9b3361

Ответ 1

Если вы хотите избежать ошибок 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()]);
  }
}

Добавлен 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);    

    }
}

Ответ 2

Если вы действительно хотите добавлять/удалять элементы из массива, могу ли я предложить List вместо этого?

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

Затем, если вам действительно нужно вернуть это обратно в массив:

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

Ответ 3

Использование Google guava library

String[] firstArray = {"test1","","test2","test4","",null};

Iterable<String> st=Iterables.filter(Arrays.asList(firstArray),new Predicate<String>() {
    @Override
    public boolean apply(String arg0) {
        if(arg0==null) //avoid null strings 
            return false;
        if(arg0.length()==0) //avoid empty strings 
            return false;
        return true; // else true
    }
});

Ответ 4

Это код, который я использую для удаления нулевых значений из массива, который не использует списки массивов.

String[] array = {"abc", "def", null, "g", null}; // Your array
String[] refinedArray = new String[array.length]; // A temporary placeholder array
int count = -1;
for(String s : array) {
    if(s != null) { // Skips over null values. Add "|| "".equals(s)" if you want to exclude empty strings
        refinedArray[++count] = s; // Increments count and sets a value in the refined array
    }
}

// Returns an array with the same data but refits it to a new length
array = Arrays.copyOf(refinedArray, count + 1);

Ответ 5

Кажется, никто не упомянул об использовании метода nonNull, который также можно использовать с streams в Java 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));

И результат:

[Apple, Cat, Dog, null]

[Apple, Cat, Dog,]

Если мы хотим включить пустую, тогда мы можем определить метод утилиты (в классе Utils (скажем)):

public static boolean isEmpty(String string) {
        return (string != null && !string.isEmpty());
    }

И затем используйте его для фильтрации элементов как:

Arrays.stream(firstArray).filter(Utils::isEmpty).toArray(String[]::new);

Я считаю, что Apache common также предоставляет утилитный метод StringUtils.isNotEmpty, который также можно использовать.

Ответ 6

Это строки с нулевой длиной, а не нуль. Но если вы хотите удалить их:

firstArray[0] refers to the first element
firstArray[1] refers to the second element

Вы можете переместить вторую в первую:

firstArray[0]  = firstArray[1]

Если вы должны были сделать это для элементов [1,2], затем [2,3] и т.д., вы в конечном итоге переместили бы все содержимое массива влево, исключив элемент 0. Вы можете увидеть, как это будет применять?