web-dev-qa-db-fra.com

Comment vérifier null sur StringBuilder?

Je veux vérifier null ou vide spécifiquement dans mon code. Est-ce que empty et null sont identiques pour StringBuilder en Java?

Par exemple:

StringBuilder state = new StringBuilder();
StringBuilder err= new StringBuilder(); 
success = executeCommand(cmd, state, err); 

/* here executeCommand() returns empty or null in state, I cant  make changes in  <br/> executeCommand() so can I check it in my code somehow for state, if its null or empty? */<br/>

if (state == null) { //do blabla1 }
if (state.tostring().equals("")) { //do blabla2 }

Le code ci-dessus a-t-il un sens ou comment devrais-je le changer?

16
user1145280

Non, null et empty sont différents pour StringBuilder.

StringBuilder nullBuilder = null;
if(nullBuilder == null) {
    System.out.println("Builder is null");
}

Et

StringBuilder emptyBuilder = new StringBuilder("");
if(emptyBuilder == null || emptyBuilder.toString().equals("")) {
    System.out.println("Builder is empty");
}
30
Kick

En Java, null est un littéral reference. Si une variable est null, alors ne fait référence à rien.

Ainsi, si vous avez StringBuilder s = null, cela signifie que s est de type StringBuilder mais ne fait pas référence à une instance StringBuilder.

Si vous avez une référence non -null, vous êtes libre d'appeler methods sur l'objet référé. Dans la classe StringBuilder, une de ces méthodes est length(). En fait, si vous appelez length() en utilisant une référence null, le moteur d'exécution Java lancera une NullPointerException.

Par conséquent, ce code est assez courant:

If (s == null || s.length() == 0/*empty if the length is zero*/){
    // do something

Il repose sur le fait que l'évaluation de || se fait de gauche à droite et s'arrête dès qu'elle atteint la première condition true.

9
Bathsheba

Moyenne nulle, il n'y a pas d'objet dans le tas pour cette variable de référence. Ceci est commun à tous les objets Java, non spécifique à StringBuilder et aux moyens vides, ""

Dans votre code, vous avez créé un objet StringBuilder. La vérification de null est donc redondante. Et, vous pouvez cocher vide en utilisant la méthode isEmpty() depuis Java String api

if(state.tostring().isEmpty()) {
//
}

Et vérifier que null est correct. Trouvez la version corrigée ici

if (state == null) {
// ...bla 1
} else if (state.tostring().isEmpty()) {
//... bla 2
}

Votre deuxième condition if lancera NullPointerException, si la state est null. Donc if devrait être imbriqué avec if else

4
Abimaran Kugathasan

Non. empty signifie qu'il n'y a pas de caractères dans StringBuilder. null signifie qu'il n'y a aucun objet StringBuilder.

Une variable est seulement null si elle a un type de référence (par exemple String, StringBuilder, Set, sous la forme d'un thumbrule: tous les types en majuscules) et si elle n'a pas encore été initialisée ou a été définie explicitement sur null.

1
markusthoemmes

Le code ci-dessous peut vous aider,

StringBuffer sb = new StringBuffer();
String str = sb.toString();
if(!"".equals(str)) {
    System.out.println("String : " + str);
} else {
    System.out.println("Empty Builder");
}
0
Srinivasan.S

Tu peux essayer comme ça

StringBuilder state = new StringBuilder();
if(StringUtils.isNotBlank(state .toString())){   
//this will check for null, " ", ""
}
0