Wie kann ich eine Zeichenfolge in Java gegen Null prüfen? ich benutze
stringname.equalsignorecase(null)
aber es funktioniert nicht.
Wie kann ich eine Zeichenfolge in Java gegen Null prüfen? ich benutze
stringname.equalsignorecase(null)
aber es funktioniert nicht.
Antworten:
string == null
vergleicht, ob das Objekt null ist. string.equals("foo")
vergleicht den Wert innerhalb dieses Objekts. string == "foo"
funktioniert nicht immer, weil Sie versuchen zu sehen, ob die Objekte gleich sind, nicht die Werte, die sie darstellen.
Längere Antwort:
Wenn Sie dies versuchen, funktioniert es nicht, wie Sie festgestellt haben:
String foo = null;
if (foo.equals(null)) {
// That fails every time.
}
Der Grund ist, dass foo null ist und daher nicht weiß, was .equals ist. Es gibt dort kein Objekt, von dem .equals aufgerufen werden können.
Was Sie wahrscheinlich wollten, war:
String foo = null;
if (foo == null) {
// That will work.
}
Der typische Weg, sich im Umgang mit Strings vor einer Null zu schützen, ist:
String foo = null;
String bar = "Some string";
...
if (foo != null && foo.equals(bar)) {
// Do something here.
}
Auf diese Weise wird, wenn foo null war, die zweite Hälfte der Bedingung nicht bewertet, und alles ist in Ordnung.
Wenn Sie ein String-Literal (anstelle einer Variablen) verwenden, ist der einfache Weg:
String foo = null;
...
if ("some String".equals(foo)) {
// Do something here.
}
Wenn Sie das umgehen möchten, verfügt Apache Commons über eine Klasse - StringUtils -, die null-sichere String-Operationen bereitstellt.
if (StringUtils.equals(foo, bar)) {
// Do something here.
}
Eine andere Antwort war ein Scherz und sagte, dass Sie dies tun sollten:
boolean isNull = false;
try {
stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
isNull = true;
}
Bitte tu das nicht. Sie sollten nur Ausnahmen für außergewöhnliche Fehler auslösen. Wenn Sie eine Null erwarten, sollten Sie diese im Voraus prüfen und nicht zulassen, dass sie die Ausnahme auslöst.
In meinem Kopf gibt es zwei Gründe dafür. Erstens sind Ausnahmen langsam; Das Prüfen gegen Null ist schnell, aber wenn die JVM eine Ausnahme auslöst, dauert es sehr lange. Zweitens ist der Code viel einfacher zu lesen und zu warten, wenn Sie nur vorher nach dem Nullzeiger suchen.
s == null
wird nicht funktionieren?
equals()
wenn Sie Werte vergleichen möchten . Wenn Sie jedoch überprüfen möchten, ob eine Variable vorhanden ist null
, verwenden Sie ==
.
Sicher funktioniert es. Sie verpassen einen wichtigen Teil des Codes. Sie müssen nur so vorgehen:
boolean isNull = false;
try {
stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
isNull = true;
}
;)
Verwenden Sie die TextUtils-Methode, wenn Sie in Android arbeiten.
TextUtils.isEmpty (str) : Gibt true zurück, wenn der String null oder 0 lang ist. Parameter: str die zu untersuchende Zeichenfolge Rückgabe: true, wenn str null oder null ist
if(TextUtils.isEmpty(str)) {
// str is null or lenght is 0
}
Unten finden Sie den Quellcode dieser Methode. Sie können direkt verwenden.
/**
* Returns true if the string is null or 0-length.
* @param str the string to be examined
* @return true if str is null or zero length
*/
public static boolean isEmpty(CharSequence str) {
if (str == null || str.length() == 0)
return true;
else
return false;
}
Wenn wir uns die Implementierung der equalsIgnoreCase-Methode ansehen, finden wir diesen Teil:
if (string == null || count != string.count) {
return false;
}
Es wird also immer zurückgegeben, false
wenn das Argument lautet null
. Und das ist offensichtlich richtig, denn der einzige Fall, in dem es zurückkehren sollte, true
ist, wenn equalsIgnoreCase auf einem null String
, aber aufgerufen wurde
String nullString = null;
nullString.equalsIgnoreCase(null);
wird definitiv zu einer NullPointerException führen.
Gleiche Methoden dienen also nicht dazu, zu testen, ob ein Objekt null ist, nur weil Sie sie nicht aufrufen können null
.
Das sieht ein bisschen seltsam aus, aber ...
stringName == null || "".equals(stringName)
Es gab noch nie Probleme, dies auf diese Weise zu tun. Außerdem ist dies eine sicherere Möglichkeit, dies zu überprüfen und mögliche Nullpunktausnahmen zu vermeiden.
Ich bin mir nicht sicher, was mit der Antwort von The MYYN falsch war.
if (yourString != null) {
//do fun stuff with yourString here
}
Die obige Nullprüfung ist in Ordnung.
Wenn Sie versuchen zu überprüfen, ob eine Zeichenfolgenreferenz einer anderen Zeichenfolge entspricht (Groß- und Kleinschreibung ignorieren), von der Sie wissen, dass sie keine Nullreferenz ist, gehen Sie wie folgt vor:
String x = "this is not a null reference"
if (x.equalsIgnoreCase(yourStringReferenceThatMightBeNull) ) {
//do fun stuff
}
Wenn Zweifel bestehen, ob Sie für beide zu vergleichenden Zeichenfolgen Nullreferenzen haben oder nicht, müssen Sie mindestens eine auf Nullreferenz prüfen, um die Möglichkeit einer NullPointerException zu vermeiden.
Wenn Ihre Zeichenfolge den Wert "null" hat, können Sie verwenden
if(null == stringName){
[code]
}
else
[Error Msg]
importiere es in deine Klasse
import org.apache.commons.lang.StringUtils;
Verwenden Sie es dann, beide geben true zurück
System.out.println(StringUtils.isEmpty(""));
System.out.println(StringUtils.isEmpty(null));
Sie können mit String == null überprüfen
Das funktioniert bei mir
String foo = null;
if(foo == null){
System.out.println("String is null");
}
Natürlich wird user351809 stringname.equalsignorecase(null)
eine NullPointerException auslösen.
Sie haben ein Zeichenfolgenobjekt stringname
, das zwei möglichen Bedingungen folgt: -
stringname
hat einen Wert ungleich Null (z. B. "Computer"): "computer".equalsignorecase(null)
false
.stringname
hat einen null
Wert: null.equalsignorecase(null)
true
, null
kein Objekt ist, das die equalsignorecase()
Methode ausführen kann .Daher erhalten Sie die Ausnahme aufgrund von Fall 2.
Ich schlage vor, Sie verwenden einfachstringname == null
Einfache Methode:
public static boolean isBlank(String value) {
return (value == null || value.equals("") || value.equals("null") || value.trim().equals(""));
}
Wenn die value
Rückgabe null ist, verwenden Sie:
if(value.isEmpty());
Irgendwann, um null zu überprüfen, gibt es if(value == null)
in Java möglicherweise nicht true, selbst wenn der String null ist.
if(value.isEmpty())
gibt NullPointerException
. In diesem Fall ist es besser mitif(value == null)
Mit Java 7 können Sie verwenden
if (Objects.equals(foo, null)) {
...
}
Dies wird zurückgegeben, true
wenn beide Parameter sind null
.
Mir ist klar, dass dies vor langer Zeit beantwortet wurde, aber ich habe dies noch nicht gesehen, also dachte ich, ich würde teilen, was ich tue. Dies ist nicht besonders gut für die Lesbarkeit von Code, aber wenn Sie eine Reihe von Nullprüfungen durchführen müssen, verwende ich gerne:
String someString = someObject.getProperty() == null ? "" : someObject.getProperty().trim();
In diesem Beispiel wird trim für die Zeichenfolge aufgerufen, wodurch eine NPE ausgelöst wird, wenn die Zeichenfolge null oder Leerzeichen ist. In derselben Zeile können Sie jedoch nach null oder leer suchen, damit Sie nicht mit einer Tonne (mehr) enden ) schwer zu formatieren, wenn Blöcke.
Wenn ich es richtig verstehe, sollte es das tun:
if(!stringname.isEmpty())
// an if to check if stringname is not null
if(stringname.isEmpy())
// an if to check if stringname is null
Nun, das letzte Mal, als jemand diese dumme Frage stellte, war die Antwort:
someString.equals("null")
Diese "Korrektur" verbirgt jedoch nur das größere Problem, wie es überhaupt null
wird "null"
.
Es gibt zwei Möglichkeiten, dies zu tun. Sagen Sie String == null oder string.equals () .
public class IfElse {
public int ifElseTesting(String a){
//return null;
return (a== null)? 0: a.length();
}
}
public class ShortCutifElseTesting {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("enter the string please:");
String a=scanner.nextLine();
/*
if (a.equals(null)){
System.out.println("you are not correct");
}
else if(a.equals("bangladesh")){
System.out.println("you are right");
}
else
System.out.println("succesful tested");
*/
IfElse ie=new IfElse();
int result=ie.ifElseTesting(a);
System.out.println(result);
}
}
Überprüfen Sie dieses Beispiel. Hier ist ein weiteres Beispiel für eine Verknüpfungsversion von If Else.