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"};
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);
}
}
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()]);
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é.
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
}
});
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);
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.