web-dev-qa-db-fra.com

Comment puis-je vérifier qu'une chaîne Java n'est pas tous des espaces?

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.

112
Ankur

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).

199
Carl Smotricz

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

52
Chris J

Un peu plus court que ce qui a été mentionné par Carl Smotricz:

!string.trim().isEmpty();
40
redslime
19
darelf
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?).

5
Rob Raisch

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()));
}
4
Andreas_D

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.

2
Pyves

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.

1
Corey Ogburn

Avec JDK/11, vous pouvez maintenant utiliser l’APIString.isBlankpour 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()
1
nullpointer

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)

0
andreyro

Alternative: 

boolean isWhiteSpaces( String s ) {
    return s != null && s.matches("\\s+");
 }
0
OscarRyz
StringUtils.isEmptyOrWhitespaceOnly(<your string>)

vérifierai : - est-ce nul - Est-ce seulement un espace - s'agit-il d'une chaîne vide ""

https://www.programcreek.com/Java-api-examples/?class=com.mysql.jdbc.StringUtils&method=isEmptyOrWhitespaceOnly

0
akakargul