Je veux vérifier que Java String ou le tableau de caractères n'est pas constitué uniquement d'espaces, en utilisant Java?
C'est une question très similaire sauf que c'est du 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 passage relatif aux caractères alphanumériques, ce qui est donc plus logique.
La solution la plus courte à laquelle je puisse penser:
if (string.trim().length() > 0) ...
Cela vérifie uniquement les espaces (non) blancs. Si vous voulez vérifier des classes de caractères particulières, vous devez utiliser le puissant match()
avec une expression rationnelle telle que:
if (string.matches(".*\\w.*")) ...
... qui vérifie au moins un caractère alphanumérique (ASCII).
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 ne correspond pas à tous les espaces, vous pouvez utiliser les éléments suivants:
StringUtils.isBlank(<your string>)
Voici la référence: StringUtils.isBlank
Un peu plus court que ce qui a été mentionné par Carl Smotricz:
!string.trim().isEmpty();
StringUtils.isBlank(CharSequence)
if(target.matches("\\S"))
// then string contains at least one non-whitespace character
Notez l'utilisation de back-slash cap-S, qui signifie "caractère non blanc"
Je parie que c'est la solution la plus simple (et peut-être la plus rapide?).
Cette réponse est davantage axée sur le sidenote " c’est-à-dire qu’il a au moins un caractère alphanumérique ". De plus, cela n’ajoute pas grand chose à l’autre solution (antérieure), sauf que cela ne vous blesse pas avec NPE au cas où la chaîne est null
.
Nous voulons false
si (1) s est null
ou (2) s est vide ou (3) s ne contient que des caractères blancs.
public static boolean containsNonWhitespaceChar(String s) {
return !((s == null) || "".equals(s.trim()));
}
Si vous utilisez Java 11, la nouvelle méthode de chaîne isBlank
sera utile:
!s.isBlank();
Si vous utilisez Java 8, 9 ou 10, vous pouvez créer un simple flux pour vérifier qu'une chaîne n'est pas uniquement un espace:
!s.chars().allMatch(Character::isWhitespace));
En plus de ne pas nécessiter de bibliothèques tierces telles qu'Apache Commons Lang, ces solutions ont l'avantage de gérer tout caractère blanc, et pas simplement les espaces ' '
ordinaires, comme le ferait une solution basée sur trim
suggérée dans de nombreuses autres réponses. Vous pouvez vous référer à Javadocs pour une liste exhaustive de tous les types d’espace blanc supportés. Notez que les chaînes vides sont également couvertes dans les deux cas.
La méthode de rognage devrait fonctionner très bien pour vous.
http://download.Oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/api/Java/lang/String.html#trim ()
Renvoie une copie de la chaîne avec espaces de début et de fin omis. Si cet objet String représente un caractère vide séquence, ou le premier et le dernier caractères de la séquence de caractères représenté par cet objet String à la fois avoir des codes supérieurs à '\ u0020' (le caractère d'espace ), puis une référence à cet objet String est renvoyé.
Sinon, s'il n'y a pas de personnage avec un code supérieur à '\ u0020' dans la chaîne, puis un nouvel objet String représentant une chaîne vide est créé et retourné.
Sinon, soit k l’indice de premier caractère de la chaîne dont le code est supérieur à '\ u0020', et laissez m être l'index du dernier caractère dans la chaîne dont le code est supérieur que '\ u0020'. Un nouvel objet String est créé, représentant la sous-chaîne de cette chaîne qui commence par le caractère à l’indice k et se termine par le caractère à l'indice m-c'est-à-dire, le résultat de cette sous-chaîne (k, m + 1).
Cette méthode peut être utilisée pour couper espaces blancs depuis le début et la fin d'une ficelle; en fait, ça coupe tout ASCII caractères de contrôle également.
Retour: Une copie de cette chaîne avec espace blanc de début et de fin enlevé, ou cette chaîne si elle n'a pas espace blanc de début ou de fin. espace blanc de début ou de fin.
Vous pouvez couper, puis comparer à une chaîne vide ou éventuellement vérifier la longueur pour 0.
Avec JDK/11, vous pouvez maintenant utiliser l’APIString.isBlank
pour vérifier si la chaîne donnée n’est pas entièrement composée de.
String str1 = " ";
System.out.println(str1.isBlank()); // made up of all whitespaces, prints true
String str2 = " a";
System.out.println(str2.isBlank()); // prints false
Le javadoc pour le même est:
/**
* Returns {@code true} if the string is empty or contains only
* {@link Character#isWhitespace(int) white space} codepoints,
* otherwise {@code false}.
*
* @return {@code true} if the string is empty or contains only
* {@link Character#isWhitespace(int) white space} codepoints,
* otherwise {@code false}
*
* @since 11
*/
public boolean isBlank()
trim () et les autres expressions rationnelles mentionnées ne fonctionnent pas pour tous les types d'espaces.
i.e: caractère Unicode 'LINE SEPARATOR' http://www.fileformat.info/info/unicode/char/2028/index.htm
Les fonctions Java Character.isWhitespace () couvrent toutes les situations.
C'est pourquoi la solution déjà mentionnée StringUtils.isWhitespace (String)} _ / ou StringUtils.isBlank (String)
Alternative:
boolean isWhiteSpaces( String s ) {
return s != null && s.matches("\\s+");
}
StringUtils.isEmptyOrWhitespaceOnly(<your string>)
vérifierai : - est-ce nul - Est-ce seulement un espace - s'agit-il d'une chaîne vide ""