Comment supprimer les espaces blancs en double (y compris les tabulations, les nouvelles lignes, les espaces, etc...) dans une chaîne de caractères en utilisant Java ?
Réponses
Trop de publicités?Comme ça :
yourString = yourString.replaceAll("\\s+", " ");
Par exemple
System.out.println("lorem ipsum dolor \n sit.".replaceAll("\\s+", " "));
sorties
lorem ipsum dolor sit.
Qu'est-ce que cela \s+
C'est-à-dire ?
\s+
est une expression régulière. \s
correspond à un espace, une tabulation, une nouvelle ligne, un retour chariot, un saut de page ou une tabulation verticale, et +
dit "un ou plusieurs de ceux-ci". Ainsi, le code ci-dessus réduira toutes les "sous-chaînes d'espacement" de plus d'un caractère, avec un seul caractère d'espacement.
Vous pouvez utiliser la regex
(\s)\1
et
remplacez-le par $1
.
Code Java :
str = str.replaceAll("(\\s)\\1","$1");
Si l'entrée est "foo\t\tbar "
vous obtiendrez "foo\tbar "
comme résultat
Mais si l'entrée est "foo\t bar"
il restera inchangé car il ne comporte pas de caractères d'espacement consécutifs.
Si vous traitez tous les caractères d'espacement (espace, tabulation verticale, tabulation horizontale, retour chariot, saut de page, nouvelle ligne) comme des espaces, vous pouvez utiliser la commande rationnelle suivante pour les remplacer tout nombre d'espaces blancs consécutifs avec un seul espace :
str = str.replaceAll("\\s+"," ");
Mais si vous voulez remplacer deux espaces blancs consécutifs par un seul espace, vous devriez le faire :
str = str.replaceAll("\\s{2}"," ");
Si vous voulez vous débarrasser de tous les espaces blancs étrangers en tête et en queue, vous devez faire quelque chose comme ceci :
// \\A = Start of input boundary
// \\z = End of input boundary
string = string.replaceAll("\\A\\s+(.*?)\\s+\\z", "$1");
Vous pouvez ensuite supprimer les doublons en utilisant les autres stratégies énumérées ici :
string = string.replaceAll("\\s+"," ");