Jak mogę sprawdzić, czy łańcuch nie jest pusty i nie jest pusty?
public void doStuff(String str)
{
if (str != null && str != "**here I want to check the 'str' is empty or not**")
{
/* handle empty string */
}
/* ... */
}
java
string
string-comparison
Bernhard Barker
źródło
źródło
PreparedStatement
i tak zamiast konstruować zapytanie SQL za pomocą operacji podstawowych konkatenacji łańcuchów. Zapobiega wszelkim podatnościom na wstrzyknięcia, znacznie bardziej czytelnym itp.Odpowiedzi:
Co z isEmpty () ?
Pamiętaj, aby użyć części
&&
w tej kolejności, ponieważ Java nie będzie oceniać drugiej części, jeśli pierwsza część się&&
nie powiedzie, zapewniając w ten sposób, że nie otrzymasz wyjątku wskaźnika zerowego odstr.isEmpty()
ifstr
jest null.Uwaga, jest dostępna tylko od wersji Java SE 1.6. Musisz sprawdzić
str.length() == 0
poprzednie wersje.Aby zignorować również białe znaki:
(ponieważ Java 11
str.trim().isEmpty()
może zostać zredukowana, dostr.isBlank()
której będzie również testowane inne białe znaki Unicode)Zawinięty w przydatną funkcję:
Staje się:
źródło
isEmpty()
wydaje się, że wymaga instancji String (niestatyczna). Wywołanie tego w odwołaniu zerowym spowoduje zgłoszenie wyjątku NullPointerException.TextUtils.isEmpty(String)
aby sprawdzić, czy ciąg jest pusty lub zerowy. Miło i krótko. Klasa TextUtils jest częścią zestawu Android SDK.(str != null && str.length() > 0)
.Użyj org.apache.commons.lang.StringUtils
Lubię używać Apache commons-lang do tego rodzaju rzeczy, a zwłaszcza klasy narzędzi StringUtils :
źródło
isEmpty
lubisBlank
może nie jest przydatne włączenie biblioteki innej firmy. Możesz po prostu stworzyć własną klasę narzędzi, aby zapewnić taką metodę. Jednak, jak wyjaśnia Bozho,commons-lang
projekt zapewnia wiele użytecznych metod!StringUtils.isNotBlank(str)
sprawdza również zerowanie.Właśnie dodałem tutaj Androida:
źródło
Aby dodać do @BJorn i @SeanPatrickFloyd Sposób Guava to zrobić:
Commons Lang jest czasami bardziej czytelny, ale powoli polegam bardziej na Guava, a czasem Commons Lang jest mylący, jeśli chodzi o
isBlank()
(jak w tym, co jest spacją, czy nie).Wersja Commons Lang autorstwa Guava to
isBlank
:Powiem, że kod, który nie pozwala
""
(pusty) ORAZnull
jest podejrzany i potencjalnie błędny, ponieważ prawdopodobnie nie obsługuje wszystkich przypadków, w których niedozwolonenull
ma sens (chociaż w przypadku SQL rozumiem, że SQL / HQL jest dziwny''
).źródło
alternatywnie
lub
Uwaga: Druga kontrola (pierwsza i druga alternatywa) zakłada, że str nie jest zerowy. Jest w porządku tylko dlatego, że robi to pierwsza kontrola (a Java nie wykonuje drugiej kontroli, jeśli pierwsza jest fałszywa)!
WAŻNE: NIE używaj == dla równości łańcuchów. == sprawdza, czy wskaźnik jest równy, a nie wartość. Dwa ciągi znaków mogą znajdować się w różnych adresach pamięci (dwa wystąpienia), ale mają tę samą wartość!
źródło
Niemal każda biblioteka wiem definiuje klasę użytkową nazwie
StringUtils
,StringUtil
alboStringHelper
, i zazwyczaj obejmują sposób, którego szukasz.Moim ulubionym jest Apache Commons / Lang , gdzie w klasie StringUtils dostajesz oba(Pierwszy sprawdza, czy łańcuch jest pusty, czy drugi, czy jest pusty, czy zawiera tylko białe znaki)
Istnieją podobne klasy narzędzi w Spring, Wicket i wiele innych bibliotek. Jeśli nie korzystasz z bibliotek zewnętrznych, możesz chcieć wprowadzić klasę StringUtils we własnym projekcie.Aktualizacja: wiele lat minęło, a te dni, polecam za pomocą Guava „s
Strings.isNullOrEmpty(string)
metody.źródło
To działa dla mnie:
źródło
Co powiesz na:
źródło
&&
if str == null, co zapobiegnie wyjątkowi NullPointerException. (Źródło: Właśnie próbowałem)Użyj metody isNotBlank Apache StringUtils jak
Zwróci true tylko wtedy, gdy str nie ma wartości null i nie jest puste.
źródło
Powinieneś użyć
org.apache.commons.lang3.StringUtils.isNotBlank()
luborg.apache.commons.lang3.StringUtils.isNotEmpty
. Decyzja między tymi dwoma opiera się na tym, co naprawdę chcesz sprawdzić.W isNotBlank () sprawdza, czy parametr wejściowy wynosi:
IsNotEmpty () sprawdza tylko, że parametr wejściowy jest
źródło
Zwraca wartość true lub false na podstawie danych wejściowych
źródło
Jeśli nie chcesz uwzględniać całej biblioteki; po prostu dołącz żądany kod. Będziesz musiał sam to utrzymać; ale jest to dość prosta funkcja. Tutaj jest kopiowany z commons.apache.org
źródło
Jest trochę za późno, ale oto funkcjonalny styl sprawdzania:
źródło
Istnieje nowa metoda w java-11:
String#isBlank
Można to połączyć z,
Optional
aby sprawdzić, czy ciąg znaków jest pusty lub pustyCiąg # isBlank
źródło
test jest równy pustemu ciągowi i zeru w tym samym warunku:
Nie wyrzuca,
NullPointerException
jeśli str ma wartość null, ponieważObject.equals()
zwraca false, jeśli argument ma wartośćnull
.drugi konstrukt
str.equals("")
rzuciłby przerażenieNullPointerException
. Niektórzy mogą rozważyć złą formę, używając dosłownego ciągu jako obiektu, któryequals()
zostanie wywołany, ale spełnia swoją rolę.Sprawdź również tę odpowiedź: https://stackoverflow.com/a/531825/1532705
źródło
str != null
.!"".equals(str)
już wykonuję robotęProste rozwiązanie:
źródło
Jak powiedział powyżej seanizer, Apache StringUtils jest do tego fantastyczny, jeśli chcesz włączyć guawę, wykonaj następujące czynności;
Czy mogę również polecić odwoływanie się do kolumn w zestawie wyników według nazwy, a nie indeksu, co znacznie ułatwi obsługę kodu.
źródło
Stworzyłem własną funkcję narzędziową do sprawdzania kilku ciągów naraz, zamiast mieć pełną instrukcję if
if(str != null && !str.isEmpty && str2 != null && !str2.isEmpty)
. To jest funkcja:więc mogę po prostu napisać:
źródło
areSet(String... strings)
można go następnie wywołać bez tworzenia tablicy:if(!StringUtils.areSet(firstName, lastName, address))
Jeśli używasz Java 8 i chcesz mieć bardziej funkcjonalne podejście do programowania, możesz zdefiniować,
Function
który zarządza kontrolą, a następnie możesz użyć go ponownie iapply()
kiedy zajdzie taka potrzeba.Idąc do praktyki, możesz zdefiniować
Function
jakoNastępnie możesz go użyć, po prostu wywołując
apply()
metodę jako:Jeśli wolisz, możesz zdefiniować,
Function
który sprawdza, czyString
jest pusty, a następnie zanegować za pomocą!
.W takim przypadku
Function
będzie wyglądać następująco:Następnie możesz go użyć, po prostu wywołując
apply()
metodę jako:źródło
Za pomocą Java 8 Optional możesz:
W tym wyrażeniu poradzisz sobie również z
String
literami spacji.źródło
Możesz użyć StringUtils.isEmpty (). Wynik będzie prawdziwy, jeśli łańcuch będzie zerowy lub pusty.
spowoduje
str1 jest zerowy lub pusty
str2 ma wartość NULL lub jest puste
źródło
isNotBlank
Poradziłbym Guava lub Apache Commons zgodnie z twoją rzeczywistą potrzebą. Sprawdź różne zachowania w moim przykładowym kodzie:
Wynik:
Apache:
a jest puste
b jest puste
c jest puste
Google:
b to NullOrEmpty
c to NullOrEmpty
źródło
Jeśli używasz Spring Boot, poniższy kod wykona zadanie
źródło
Dla kompletności: jeśli już korzystasz ze struktury Spring , StringUtils udostępnia metodę
jak również metoda
źródło
Po prostu, aby zignorować również białe znaki:
źródło
Jeśli używasz platformy Spring, możesz użyć metody:
Ta metoda przyjmuje dowolny obiekt jako argument, porównując go do wartości null i pustego ciągu. W rezultacie ta metoda nigdy nie zwróci wartości true dla niepustego obiektu innego niż String.
źródło
StringUtils
wyraźnie stwierdza: „Głównie do użytku wewnętrznego w ramach; rozważ Apache's Lang Lang jako bardziej wszechstronny zestaw narzędzi String”.Lepszym sposobem obsługi wartości null w ciągu jest
W skrócie,
źródło
Aby sprawdzić, czy wszystkie atrybuty łańcucha w obiekcie są puste (Zamiast używać! = Null dla wszystkich nazw pól po podejściu API do Java odbicie
Ta metoda zwróciłaby wartość true, jeśli wszystkie wartości pola String są puste, Zwróciłaby wartość false, jeśli w atrybutach String występuje jedna wartość
źródło
Zetknąłem się z sytuacją, w której muszę sprawdzić, czy „null” (jako ciąg znaków) należy uznać za pusty. Również biała spacja i rzeczywista wartość null muszą zwracać wartość true. W końcu zdecydowałem się na następującą funkcję ...
źródło
W przypadku konieczności zweryfikowania parametrów metody można użyć prostej metody
Przykład:
źródło