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.
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.
Odpowiedzi:
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?
equals()
jeśli chcesz porównać wartości . Ale jeśli chcesz sprawdzić, czy zmienna jest null
, 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;
}
;)
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;
}
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 jest null
. 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 a null String
, ale
String 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
.
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.
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.
Jeśli twój łańcuch ma wartość „null”, możesz użyć
if(null == stringName){
[code]
}
else
[Error Msg]
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));
Możesz sprawdzić za pomocą String == null
To działa dla mnie
String foo = null;
if(foo == null){
System.out.println("String is null");
}
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”): "computer".equalsignorecase(null)
false
.stringname
ma null
wartość: null.equalsignorecase(null)
true
, 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
Prosta metoda:
public static boolean isBlank(String value) {
return (value == null || value.equals("") || value.equals("null") || value.trim().equals(""));
}
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.
if(value.isEmpty())
daje NullPointerException
. 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
.
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.
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
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.
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 ..