Wie kann ich überprüfen, ob eine Zeichenfolge nicht null und nicht leer ist?
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
quelle
quelle
PreparedStatement
und so verwenden, anstatt eine SQL-Abfrage nach Zeichenfolgenverkettungsprimitiven zu erstellen. Vermeidet alle Arten von Injektionsschwachstellen, viel besser lesbar usw.Antworten:
Was ist mit isEmpty () ?
Stellen Sie sicher, dass Sie die Teile von
&&
in dieser Reihenfolge verwenden, da Java den zweiten Teil nicht auswertet, wenn der erste Teil von&&
fehlschlägt. Dadurch wird sichergestellt, dass Sie keine Nullzeigerausnahme vonstr.isEmpty()
if erhalten, wennstr
null ist.Achtung, es ist erst seit Java SE 1.6 verfügbar. Sie müssen
str.length() == 0
frühere Versionen überprüfen .So ignorieren Sie auch Leerzeichen:
(da Java 11
str.trim().isEmpty()
reduziert werden kann,str.isBlank()
wird auch auf andere Unicode-Leerzeichen getestet)Eingewickelt in eine praktische Funktion:
Wird:
quelle
isEmpty()
anscheinend eine String-Instanz erforderlich ist (nicht statisch). Wenn Sie dies für eine Nullreferenz aufrufen, wird eine NullPointerException ausgelöst.TextUtils.isEmpty(String)
zu überprüfen, ob die Zeichenfolge leer oder null ist. Schön kurz. Die TextUtils-Klasse ist Teil des Android SDK.(str != null && str.length() > 0)
.Verwenden Sie org.apache.commons.lang.StringUtils
Ich verwende gerne Apache commons-lang für diese Art von Dingen, insbesondere für die Dienstprogrammklasse StringUtils :
quelle
isEmpty
oder verwendenisBlank
, ist es möglicherweise nicht sinnvoll, eine Bibliothek eines Drittanbieters einzuschließen . Sie können einfach Ihre eigene Dienstprogrammklasse erstellen, um eine solche Methode bereitzustellen. Wie Bozho erklärt, bietet dascommons-lang
Projekt jedoch viele nützliche Methoden!StringUtils.isNotBlank(str)
auch die Nullprüfung.Fügen Sie hier einfach Android hinzu:
quelle
Hinzufügen zu @BJorn und @SeanPatrickFloyd Die Guava-Methode, um dies zu tun, ist:
Commons Lang ist manchmal besser lesbar, aber ich habe mich langsam mehr auf Guava verlassen und manchmal ist Commons Lang verwirrend, wenn es darum geht
isBlank()
(wie in Leerzeichen oder nicht).Guavas Version von Commons Lang
isBlank
wäre:Ich werde sagen, dass Code, der nicht zulässt
""
(leer) UNDnull
verdächtig und möglicherweise fehlerhaft ist, da er wahrscheinlich nicht alle Fälle behandelt, in denen dasnull
Nichtzulassen Sinn macht (obwohl ich für SQL verstehen kann, dass SQL / HQL seltsam ist''
).quelle
Alternative
oder
Hinweis: Bei der zweiten Prüfung (erste und zweite Alternative) wird davon ausgegangen, dass str nicht null ist. Es ist nur in Ordnung, weil die erste Prüfung dies tut (und Java die zweite Prüfung nicht durchführt, wenn die erste falsch ist)!
WICHTIG: Verwenden Sie == NICHT für die Zeichenfolgengleichheit. == prüft, ob der Zeiger gleich ist, nicht der Wert. Zwei Zeichenfolgen können sich in unterschiedlichen Speicheradressen befinden (zwei Instanzen), haben jedoch denselben Wert!
quelle
Fast jede Bibliothek weiß ich , definiert eine Utility - Klasse genannt
StringUtils
,StringUtil
oderStringHelper
, und sie sind in der Regel die Methode die Sie suchen.Mein persönlicher Favorit ist Apache Commons / Lang , wo Sie in der StringUtils- Klasse beide bekommen(Der erste prüft, ob eine Zeichenfolge null oder leer ist, der zweite prüft, ob sie null, leer oder nur Leerzeichen ist.)
Es gibt ähnliche Utility-Klassen in Spring, Wicket und vielen anderen Bibliotheken. Wenn Sie keine externen Bibliotheken verwenden, möchten Sie möglicherweise eine StringUtils-Klasse in Ihr eigenes Projekt einführen.Update: Viele Jahre sind vergangen, und heutzutage würde ich die Verwendung der Guava -
Strings.isNullOrEmpty(string)
Methode empfehlen .quelle
Das funktioniert bei mir:
quelle
Wie wäre es mit:
quelle
&&
if str == null wird nicht ausgeführt , wodurch eine NullPointerException verhindert wird. (Quelle: Ich habe es gerade versucht)Verwenden Sie die isNotBlank-Methode von Apache StringUtils wie
Es wird nur dann true zurückgegeben, wenn der str nicht null und nicht leer ist.
quelle
Sie sollten
org.apache.commons.lang3.StringUtils.isNotBlank()
oder verwendenorg.apache.commons.lang3.StringUtils.isNotEmpty
. Die Entscheidung zwischen diesen beiden basiert auf dem, wonach Sie tatsächlich suchen möchten.Die isNotBlank () überprüft , dass der Eingangsparameter ist:
Die isNotEmpty () überprüft nur , dass der Eingangsparameter ist
quelle
Gibt basierend auf der Eingabe true oder false zurück
quelle
Wenn Sie nicht die gesamte Bibliothek einschließen möchten; Fügen Sie einfach den gewünschten Code hinzu. Sie müssen es selbst warten; aber es ist eine ziemlich einfache Funktion. Hier wird es von commons.apache.org kopiert
quelle
Es ist etwas zu spät, aber hier ist ein funktionaler Überprüfungsstil:
quelle
Es gibt eine neue Methode in Java-11::
String#isBlank
Dies kann kombiniert werden
Optional
, um zu überprüfen, ob die Zeichenfolge null oder leer istString # isBlank
quelle
Test entspricht einer leeren Zeichenfolge und null in derselben Bedingung:
Wirft nicht,
NullPointerException
wenn str null ist, daObject.equals()
false zurückgegeben wird, wenn arg istnull
.das andere Konstrukt
str.equals("")
würde die gefürchteten werfenNullPointerException
. Einige mögen eine schlechte Form in Betracht ziehen, indem sie ein String-Literal als das Objekt verwenden, auf dasequals()
es aufgerufen wird, aber es erledigt den Job.Überprüfen Sie auch diese Antwort: https://stackoverflow.com/a/531825/1532705
quelle
str != null
.!"".equals(str)
mache schon den JobEinfache Lösung:
quelle
Wie oben erwähnt, ist Apache StringUtils dafür fantastisch. Wenn Sie Guave einschließen, sollten Sie Folgendes tun:
Darf ich auch empfehlen, dass Sie die Spalten in Ihrer Ergebnismenge nicht nach Index, sondern nach Namen referenzieren. Dadurch wird die Verwaltung Ihres Codes erheblich vereinfacht.
quelle
Ich habe meine eigene Utility-Funktion erstellt, um mehrere Zeichenfolgen gleichzeitig zu überprüfen, anstatt eine if-Anweisung voller zu haben
if(str != null && !str.isEmpty && str2 != null && !str2.isEmpty)
. Dies ist die Funktion:so kann ich einfach schreiben:
quelle
areSet(String... strings)
kann dann ohne die Array-Erstellung aufgerufen werden:if(!StringUtils.areSet(firstName, lastName, address))
Wenn Sie Java 8 verwenden und einen funktionaleren Programmieransatz wünschen, können Sie einen definieren
Function
, der das Steuerelement verwaltet, und ihn dann wiederverwenden undapply()
Wenn .Wenn Sie zum Üben kommen, können Sie das
Function
als definierenAnschließend können Sie es verwenden, indem Sie die
apply()
Methode einfach wie folgt aufrufen :Wenn Sie möchten, können Sie ein definieren
Function
, das prüft, ob dasString
leer ist, und es dann mit negieren!
.In diesem Fall
Function
sieht das folgendermaßen aus:Anschließend können Sie es verwenden, indem Sie die
apply()
Methode einfach wie folgt aufrufen :quelle
Mit Java 8 Optional können Sie Folgendes tun:
In diesem Ausdruck behandeln Sie
String
s, die ebenfalls aus Leerzeichen bestehen.quelle
Sie können StringUtils.isEmpty () verwenden. Es wird true ausgegeben, wenn der String entweder null oder leer ist.
wird darin enden, dass
str1 ist null oder leer
str2 ist null oder leer
quelle
isNotBlank
Ich würde Guava oder Apache Commons je nach Ihrem tatsächlichen Bedarf empfehlen. Überprüfen Sie die verschiedenen Verhaltensweisen in meinem Beispielcode:
Ergebnis:
Apache:
a ist leer
b ist leer
c ist leer
Google:
b ist NullOrEmpty
c ist NullOrEmpty
quelle
Wenn Sie Spring Boot verwenden, führt der folgende Code den Job aus
quelle
Der Vollständigkeit halber : Wenn Sie bereits das Spring-Framework verwenden , stellen die StringUtils die Methode bereit
sowie die Methode
quelle
Um auch Leerzeichen zu ignorieren:
quelle
Wenn Sie Spring Framework verwenden, können Sie folgende Methode verwenden:
Diese Methode akzeptiert jedes Objekt als Argument und vergleicht es mit null und dem leeren String. Infolgedessen gibt diese Methode für ein Nicht-Null-Nicht-String-Objekt niemals true zurück.
quelle
StringUtils
"Hauptsächlich für den internen Gebrauch innerhalb des Frameworks; betrachten Sie Apaches Commons Lang für eine umfassendere Suite von String-Dienstprogrammen" angegeben wird.Der bessere Weg, um mit Null in der Zeichenfolge umzugehen, ist:
Zusamenfassend,
quelle
So überprüfen Sie, ob alle Zeichenfolgenattribute in einem Objekt leer sind (anstatt! = Null für alle Feldnamen nach dem Java Reflection API-Ansatz zu verwenden
Diese Methode würde true zurückgeben, wenn alle String-Feldwerte leer sind. Sie würde false zurückgeben, wenn ein Wert in den String-Attributen vorhanden ist
quelle
Ich bin auf eine Situation gestoßen, in der ich überprüfen muss, ob "null" (als Zeichenfolge) als leer angesehen werden muss. Auch Leerzeichen und eine tatsächliche Null müssen true zurückgeben. Ich habe mich endlich für folgende Funktion entschieden ...
quelle
Wenn Sie Ihre Methodenparameter validieren müssen, können Sie die folgende einfache Methode verwenden
Beispiel:
quelle