Ich möchte mit Java überprüfen, ob Java String oder Zeichenarray nicht nur aus Leerzeichen besteht.
Dies ist eine sehr ähnliche Frage, außer dass es sich um Javascript handelt:
Wie kann ich überprüfen, ob die Zeichenfolge Zeichen und Leerzeichen enthält, nicht nur Leerzeichen?
BEARBEITEN : Ich habe das Bit über alphanumerische Zeichen entfernt, daher ist es sinnvoller.
java
string
whitespace
Ankur
quelle
quelle
String.isBlank
API für dasselbe verwenden.Antworten:
Die kürzeste Lösung, die ich mir vorstellen kann:
Dies prüft nur auf (nicht) Leerzeichen. Wenn Sie nach bestimmten Zeichenklassen
match()
suchen möchten, müssen Sie den Mächtigen mit einem regulären Ausdruck verwenden, wie z.... die nach mindestens einem (ASCII) alphanumerischen Zeichen sucht.
quelle
matches()
: Für die Leistung speichere ich das normalerweisePattern
in einemfinal static
. Zahlt sich aus, wenn derselbe Code häufig ausgeführt wird.null
ist kein String!"Ich würde die Apache Commons Lang-Bibliothek verwenden. Es hat eine Klasse namens StringUtils, die für alle Arten von String-Operationen nützlich ist. Um zu überprüfen, ob ein String nicht nur aus Leerzeichen besteht, können Sie Folgendes verwenden:
Hier ist die Referenz: StringUtils.isBlank
quelle
StringUtils.isEmpty
wird jetzt false zurückgeben, wenn Sie "" übergeben.Etwas kürzer als von Carl Smotricz erwähnt:
quelle
https://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/StringUtils.html#isBlank-java.lang.CharSequence-
quelle
Wenn Sie Java 11 verwenden , ist die neue
isBlank
Zeichenfolgenmethode hilfreich:Wenn Sie Java 8, 9 oder 10 verwenden , können Sie einen einfachen Stream erstellen, um zu überprüfen, ob eine Zeichenfolge nicht nur Leerzeichen ist:
Diese Lösungen erfordern nicht nur keine Bibliotheken von Drittanbietern wie Apache Commons Lang, sondern haben auch den Vorteil, dass sie Leerzeichen und nicht nur
' '
Leerzeichen verarbeiten können, wie diestrim
in vielen anderen Antworten vorgeschlagen würde. In den Javadocs finden Sie eine vollständige Liste aller unterstützten Leerraumtypen. Beachten Sie, dass in beiden Fällen auch leere Zeichenfolgen abgedeckt sind.quelle
Beachten Sie die Verwendung von Back-Slash Cap-S, was "Nicht-Leerzeichen" bedeutet.
Ich würde wetten, dass dies die einfachste (und vielleicht schnellste?) Lösung ist.
quelle
String year="1995"; year.matches("\\S"); will return false
Das ist also keine richtige Lösung. : |Diese Antwort konzentriert sich mehr auf die Nebenbemerkung " dh hat mindestens ein alphanumerisches Zeichen ". Außerdem fügt es der anderen (früheren) Lösung nicht zu viel hinzu, außer dass es Sie mit NPE nicht verletzt, falls der String es ist
null
.Wir wollen,
false
wenn (1) s istnull
oder (2) s leer ist oder (3) s nur Whitechars enthält.quelle
Wenn Sie nur nach Leerzeichen suchen und sich nicht für Null interessieren, können Sie org.apache.commons.lang.StringUtils.isWhitespace (String str) verwenden.
StringUtils.isWhitespace(String str);
(Überprüft, ob der String nur Leerzeichen enthält.)
Wenn Sie auch nach null suchen möchten (einschließlich Leerzeichen), dann
quelle
Mit Java-11 + können Sie mithilfe der
String.isBlank
API überprüfen, ob die angegebene Zeichenfolge nicht ausschließlich aus Leerzeichen besteht.Der Javadoc für das gleiche ist:
quelle
Die Trimmmethode sollte für Sie gut funktionieren.
http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/api/java/lang/String.html#trim ()
Sie können zuschneiden und dann mit einer leeren Zeichenfolge vergleichen oder möglicherweise die Länge auf 0 überprüfen.
quelle
Alternative:
quelle
trim () und andere erwähnte reguläre Ausdrücke funktionieren nicht für alle Arten von Leerzeichen
dh: Unicode-Zeichen 'LINE SEPARATOR' http://www.fileformat.info/info/unicode/char/2028/index.htm
Die Java-Funktionen Character.isWhitespace () decken alle Situationen ab.
Aus diesem Grund sollte die bereits erwähnte Lösung StringUtils.isWhitespace (String) / oder StringUtils.isBlank (String) verwendet werden.
quelle
wird prüfen: - ist es null - ist es nur Leerzeichen - ist es leere Zeichenfolge ""
https://www.programcreek.com/java-api-examples/?class=com.mysql.jdbc.StringUtils&method=isEmptyOrWhitespaceOnly
quelle
Nur ein Leistungsvergleich unter openjdk 13, Windows 10. Für jeden dieser Texte:
führte einen der folgenden Tests durch:
jeweils 10.000.000 mal.
Die Ergebnisse:
Überraschenderweise ist das Trimmen + Leer am schnellsten. Auch wenn der zugeschnittene Text erstellt werden muss. Immer noch schneller als eine einfache for-Schleife, die nach einem einzigen Zeichen ohne Leerzeichen sucht ...
BEARBEITEN: Je länger der Text, desto mehr Zahlen unterscheiden sich. Das Trimmen von Langtext dauert länger als nur eine einfache Schleife. Die regulären Ausdrücke sind jedoch immer noch die langsamste Lösung.
quelle
Während ich persönlich würde lieber sein
!str.isBlank()
, als andere bereits vorgeschlagen (oderstr -> !str.isBlank()
als Prädikat), eine modernere und effizientere Version desstr.trim()
oben erwähnten Ansatzes wäre mitstr.strip()
- unter Berücksichtigung nulls als „Leerzeichen“:Zum Beispiel als Prädikat zur Verwendung mit Streams, z. B. in einem Unit-Test:
quelle