Jak mogę sprawdzić ciąg znaków pod kątem wartości null w Javie? ja używam
stringname.equalsignorecase(null)
ale to nie działa.
string == null
porównuje, czy obiekt ma wartość null. string.equals("foo")
porównuje wartość wewnątrz tego obiektu. string == "foo"
nie zawsze działa, ponieważ próbujesz sprawdzić, czy obiekty są takie same, a nie wartości, które reprezentują.
Dłuższa odpowiedź:
Jeśli spróbujesz tego, to nie zadziała, jak znalazłeś:
String foo = null;
if (foo.equals(null)) {
// That fails every time.
}
Powodem jest to, że foo jest null, więc nie wie, czym jest .equals; nie ma tam obiektu, z którego można by wywołać .equals.
Prawdopodobnie chciałeś:
String foo = null;
if (foo == null) {
// That will work.
}
Typowy sposób na zabezpieczenie się przed wartością zerową w przypadku ciągów to:
String foo = null;
String bar = "Some string";
...
if (foo != null && foo.equals(bar)) {
// Do something here.
}
W ten sposób, jeśli foo było zerowe, nie ocenia drugiej połowy warunku i wszystko jest w porządku.
Prosty sposób, jeśli używasz literału typu String (zamiast zmiennej), to:
String foo = null;
...
if ("some String".equals(foo)) {
// Do something here.
}
Jeśli chcesz to obejść, Apache Commons ma klasę - StringUtils - która zapewnia operacje na ciągach znaków null-bezpieczne.
if (StringUtils.equals(foo, bar)) {
// Do something here.
}
Inna odpowiedź była żartem i powiedziała, że powinieneś to zrobić:
boolean isNull = false;
try {
stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
isNull = true;
}
Proszę, nie rób tego. Należy zgłaszać wyjątki tylko dla wyjątkowych błędów; jeśli oczekujesz wartości null, powinieneś sprawdzić ją z wyprzedzeniem i nie pozwolić jej zgłosić wyjątku.
W mojej głowie są ku temu dwa powody. Po pierwsze, wyjątki są powolne; sprawdzanie wartości null jest szybkie, ale gdy JVM zgłasza wyjątek, zajmuje dużo czasu. Po drugie, kod jest znacznie łatwiejszy do odczytania i utrzymania, jeśli po prostu wcześniej sprawdzisz wskaźnik zerowy.
s == null
nie zadziała?
źródło
equals()
jeśli chcesz porównać wartości . Ale jeśli chcesz sprawdzić, czy zmienna jestnull
, użyj==
.Jasne, że działa. Brakuje Ci istotnej części kodu. Musisz tylko zrobić w ten sposób:
boolean isNull = false; try { stringname.equalsIgnoreCase(null); } catch (NullPointerException npe) { isNull = true; }
;)
źródło
Użyj metody TextUtils, jeśli pracujesz w systemie Android.
TextUtils.isEmpty (str) : zwraca wartość true, jeśli ciąg ma długość null lub 0. Parametry: str łańcuch do zbadania Zwraca: prawda, jeśli str ma długość zerową lub zerową
if(TextUtils.isEmpty(str)) { // str is null or lenght is 0 }
Poniżej znajduje się kod źródłowy tej metody, możesz użyć direclty.
/** * 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; }
źródło
Jeśli spojrzymy na implementację metody equalsIgnoreCase, znajdziemy tę część:
if (string == null || count != string.count) { return false; }
Więc zawsze zwróci,
false
jeśli argumentem jestnull
. I to oczywiście ma rację, ponieważ jedyny przypadek, w którym powinien zwrócić,true
to sytuacja, w której equalsIgnoreCase została wywołana na anull String
, aleString nullString = null; nullString.equalsIgnoreCase(null);
z pewnością spowoduje wyjątek NullPointerException.
Zatem metody equals nie są przeznaczone do testowania, czy obiekt jest pusty, tylko dlatego, że nie można ich wywołać
null
.źródło
Wygląda to trochę dziwnie, ale ...
stringName == null || "".equals(stringName)
Nigdy nie miałem żadnych problemów z robieniem tego w ten sposób, a ponadto jest to bezpieczniejszy sposób sprawdzania, unikając potencjalnych wyjątków od punktu zerowego.
źródło
Nie jestem pewien, co było nie tak z odpowiedzią MYYN.
if (yourString != null) { //do fun stuff with yourString here }
Powyższe sprawdzenie zerowe jest całkiem w porządku.
Jeśli próbujesz sprawdzić, czy referencja typu String jest równa (ignorując wielkość liter) z innym ciągiem, o którym wiesz , że nie jest odwołaniem zerowym, zrób coś takiego:
String x = "this is not a null reference" if (x.equalsIgnoreCase(yourStringReferenceThatMightBeNull) ) { //do fun stuff }
Jeśli istnieje jakakolwiek wątpliwość co do tego, czy masz zerowe referencje dla obu porównywanych ciągów, musisz sprawdzić zerowe odwołanie do co najmniej jednego z nich, aby uniknąć możliwości wystąpienia NullPointerException.
źródło
Jeśli twój łańcuch ma wartość „null”, możesz użyć
if(null == stringName){ [code] } else [Error Msg]
źródło
zaimportuj go do swojej klasy
import org.apache.commons.lang.StringUtils;
następnie użyj go, oba zwrócą prawdę
System.out.println(StringUtils.isEmpty("")); System.out.println(StringUtils.isEmpty(null));
źródło
Możesz sprawdzić za pomocą String == null
To działa dla mnie
String foo = null; if(foo == null){ System.out.println("String is null"); }
źródło
Oczywiście user351809
stringname.equalsignorecase(null)
zgłosi wyjątek NullPointerException.Widzisz, masz obiekt typu string
stringname
, który spełnia 2 możliwe warunki: -stringname
ma wartość niezerową (powiedzmy „komputer”):Twój kod będzie działał poprawnie, ponieważ przyjmuje postać,
"computer".equalsignorecase(null)
a oczekiwana odpowiedź jest wyświetlana jako
false
.stringname
manull
wartość:tutaj twój kod utknie, ponieważ
null.equalsignorecase(null)
wydaje się jednak dobry na pierwszy rzut oka i możesz mieć nadzieję, że odpowiedź
true
,ale
null
nie jest obiektem, który może wykonaćequalsignorecase()
metodę.W związku z tym otrzymujesz wyjątek ze względu na przypadek 2.
Proponuję po prostu użyć
stringname == null
źródło
Prosta metoda:
public static boolean isBlank(String value) { return (value == null || value.equals("") || value.equals("null") || value.trim().equals("")); }
źródło
Jeśli
value
zwracana wartość ma wartość null, użyj:if(value.isEmpty());
Czasami, aby sprawdzić null,
if(value == null)
w Javie może to nie dać prawdy, nawet jeśli String jest zerowy.źródło
if(value.isEmpty())
dajeNullPointerException
. W tym przypadku lepiej jest używaćif(value == null)
W Javie 7 możesz używać
if (Objects.equals(foo, null)) { ... }
która zwróci,
true
jeśli oba parametry sąnull
.źródło
Zdaję sobie sprawę, że odpowiedź na to pytanie otrzymałem dawno temu, ale nie widziałem tego posta, więc pomyślałem, że podzielę się tym, co robię. Nie jest to szczególnie dobre dla czytelności kodu, ale jeśli musisz wykonać serię sprawdzeń zerowych, lubię używać:
String someString = someObject.getProperty() == null ? "" : someObject.getProperty().trim();
W tym przykładzie trim jest wywoływany na łańcuchu, co spowodowałoby wyrzucenie NPE, gdyby łańcuch był pusty lub spacje, ale w tym samym wierszu można sprawdzić, czy nie ma wartości null lub pustej, aby nie uzyskać tony (więcej ) trudne do sformatowania, jeśli są blokami.
źródło
Jeśli dobrze rozumiem, powinno to zrobić:
if(!stringname.isEmpty()) // an if to check if stringname is not null if(stringname.isEmpty()) // an if to check if stringname is null
źródło
Cóż, ostatnim razem, gdy ktoś zadał to głupie pytanie, odpowiedź brzmiała:
someString.equals("null")
Ta „poprawka” ukrywa jednak tylko większy problem związany z tym, jak
null
się"null"
pojawia.źródło
Można to zrobić na dwa sposoby… Powiedz String == null lub 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); } }
Sprawdź ten przykład ... Oto kolejny przykład skrótu wersji If Else ..
źródło