web-dev-qa-db-fra.com

Supprimer la valeur nulle du tableau de chaînes dans java

Comment supprimer la valeur nulle du tableau String en Java?

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

J'ai besoin du "firstArray" sans valeurs nulles (vides) comme ceci

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

Si vous souhaitez éviter les erreurs de clôture et éviter de déplacer et de supprimer des éléments dans un tableau, voici une solution quelque peu détaillée qui utilise 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 ajouté pour montrer la différence entre une instance String vide ("") et null.

Puisque cette réponse a environ 4,5 ans, j'ajoute un Java 8 exemple:

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

    }
}
65
Vivin Paliath

Si vous souhaitez réellement ajouter/supprimer des éléments d'un tableau, puis-je suggérer un List à la place?

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

Ensuite, si vous vraiment devez remettre cela dans un tableau:

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

Il semble que personne n'ait mentionné l'utilisation de la méthode nonNull qui peut également être utilisée avec streams dans Java 8 pour supprimer null (mais pas vide) car:

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

Et la sortie est:

[Apple, Chat, Chien, null]

[Pomme, chat, chien,]

Si nous voulons également incorporer vide, nous pouvons définir une méthode utilitaire (dans la classe Utils (disons)):

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

Et puis utilisez-le pour filtrer les éléments comme suit:

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

Je pense qu'Apache Common fournit également une méthode utilitaire StringUtils.isNotEmpty qui peut également être utilisé.

6
i_am_zero

Utilisation de Google bibliothèque de goyave

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
Emil

C'est le code que j'utilise pour supprimer les valeurs nulles d'un tableau qui n'utilise pas de listes de tableaux.

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);
3
Ian S.

Un morceau de code compatible avec le GC:

public static<X> X[] arrayOfNotNull(X[] array) {
    for (int p=0, N=array.length; p<N; ++p) {
        if (array[p] == null) {
            int m=p; for (int i=p+1; i<N; ++i) if (array[i]!=null) ++m;
            X[] res = Arrays.copyOf(array, m);
            for (int i=p+1; i<N; ++i) if (array[i]!=null) res[p++] = array[i];
            return res;
        }
    }
    return array;
}

Il renvoie le tableau d'origine s'il ne contient pas de null. Il ne modifie pas le tableau d'origine.

0