Je veux vérifier que Java String ou tableau de caractères n'est pas uniquement composé d'espaces, en utilisant Java?
C'est une question très similaire sauf que c'est Javascript:
Comment puis-je vérifier si la chaîne contient des caractères et des espaces, pas seulement des espaces?
EDIT : J'ai supprimé le mot sur les caractères alphanumériques, donc cela a plus de sens.
java
string
whitespace
Ankur
la source
la source
String.isBlank
API pour la même chose.Réponses:
La solution la plus courte à laquelle je puisse penser:
Cela vérifie uniquement les espaces (non) blancs. Si vous voulez vérifier des classes de caractères particulières, vous devez utiliser le mighty
match()
avec une expression rationnelle telle que:... qui vérifie au moins un caractère alphanumérique (ASCII).
la source
matches()
: pour la performance, je stocke généralement lePattern
dans un fichierfinal static
. Paye si le même code s'exécute fréquemment.null
n'est pas une chaîne!"J'utiliserais la bibliothèque Apache Commons Lang. Il a une classe appelée StringUtils qui est utile pour toutes sortes d'opérations String. Pour vérifier si une chaîne n'est pas composée de tous les espaces, vous pouvez utiliser ce qui suit:
Voici la référence: StringUtils.isBlank
la source
StringUtils.isEmpty
retournera désormais false si vous passez "".Légèrement plus court que ce qui a été mentionné par Carl Smotricz:
la source
https://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/StringUtils.html#isBlank-java.lang.CharSequence-
la source
Si vous utilisez Java 11 , la nouvelle
isBlank
méthode de chaîne vous sera utile:Si vous utilisez Java 8, 9 ou 10 , vous pouvez créer un flux simple pour vérifier qu'une chaîne n'est pas uniquement un espace:
En plus de ne nécessiter aucune bibliothèque tierce telle qu'Apache Commons Lang, ces solutions ont l'avantage de gérer n'importe quel caractère d'espace blanc, et pas seulement des
' '
espaces simples comme le ferait unetrim
solution basée sur une solution suggérée dans de nombreuses autres réponses. Vous pouvez vous référer aux Javadocs pour une liste exhaustive de tous les types d'espaces blancs pris en charge. Notez que les chaînes vides sont également couvertes dans les deux cas.la source
Notez l'utilisation de la barre oblique inversée cap-S, qui signifie "caractère non-blanc"
Je parierais que c'est la solution la plus simple (et peut-être la plus rapide?).
la source
String year="1995"; year.matches("\\S"); will return false
ce n'est donc pas la bonne solution. : |Cette réponse se concentre davantage sur la note latérale " c'est-à-dire qu'elle a au moins un caractère alphanumérique ". En plus de cela, cela n'ajoute pas trop à l'autre solution (antérieure), sauf que cela ne vous fait pas de mal avec NPE au cas où la chaîne le serait
null
.Nous voulons
false
si (1) s estnull
ou (2) s est vide ou (3) s ne contient que des whitechars.la source
Si vous ne vérifiez que les espaces et que vous ne vous souciez pas de null, vous pouvez utiliser org.apache.commons.lang.StringUtils.isWhitespace (String str),
StringUtils.isWhitespace(String str);
(Vérifie si la chaîne ne contient que des espaces.)
Si vous souhaitez également vérifier la valeur nulle (y compris les espaces), alors
la source
Avec Java-11 +, vous pouvez utiliser l'
String.isBlank
API pour vérifier si la chaîne donnée n'est pas entièrement composée d'espaces -Le javadoc pour le même est:
la source
La méthode de coupe devrait bien fonctionner pour vous.
http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/api/java/lang/String.html#trim ()
Vous pouvez couper et comparer à une chaîne vide ou vérifier la longueur pour 0.
la source
Alternative:
la source
trim () et les autres expressions régulières mentionnées ne fonctionnent pas pour tous les types d'espaces blancs
ie: Caractère Unicode 'LINE SEPARATOR' http://www.fileformat.info/info/unicode/char/2028/index.htm
Fonctions Java Character.isWhitespace () couvre toutes les situations.
C'est pourquoi la solution déjà mentionnée StringUtils.isWhitespace (String) / ou StringUtils.isBlank (String) doit être utilisée.
la source
va vérifier: - est-il nul - est-ce seulement un espace - est-ce une chaîne vide ""
https://www.programcreek.com/java-api-examples/?class=com.mysql.jdbc.StringUtils&method=isEmptyOrWhitespaceOnly
la source
Juste une comparaison de performances sur openjdk 13, Windows 10. Pour chacun de ces textes:
exécuté l'un des tests suivants:
chaque 10.000.000 fois.
Les resultats:
De manière assez surprenante, l'assiette + vide est la plus rapide. Même s'il a besoin de construire le texte coupé. Encore plus rapide que la simple boucle for à la recherche d'un seul caractère non espacé ...
EDIT: Plus le texte est long, plus les nombres diffèrent. La découpe d'un long texte prend plus de temps qu'une simple boucle. Cependant, les expressions régulières sont toujours la solution la plus lente.
la source
Alors que personnellement, je préférerais
!str.isBlank()
, comme d'autres l'ont déjà suggéré (ou enstr -> !str.isBlank()
tant que prédicat), une version plus moderne et efficace de l'str.trim()
approche mentionnée ci-dessus, utiliserstr.strip()
- en considérant les valeurs nulles comme des "espaces":Par exemple en tant que prédicat, à utiliser avec des flux, par exemple dans un test unitaire:
la source