Comment supprimer les espaces blancs en double (y compris les tabulations, les nouvelles lignes, les espaces, etc.) d'une chaîne en utilisant Java?
Comme ça:
_yourString = yourString.replaceAll("\\s+", " ");
_
Par exemple
_System.out.println("lorem ipsum dolor \n sit.".replaceAll("\\s+", " "));
_
les sorties
_lorem ipsum dolor sit.
_
Que signifie ce _\s+
_?
_\s+
_ est une expression régulière. _\s
_ correspond à un espace, une tabulation, une nouvelle ligne, un retour à la ligne, un saut de page ou un onglet vertical, et _+
_ indique "un ou plusieurs de ceux-ci". Ainsi, le code ci-dessus réduira toutes les "sous-chaînes d'espaces" d'une longueur supérieure à un caractère, avec un seul caractère d'espacement.
Source: Java: Suppression des espaces blancs en double dans les chaînes
Vous pouvez utiliser le 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 "
en sortie.
Mais si vous saisissez "foo\t bar"
, il restera inchangé, car il ne contient aucun caractère d'espacement consécutif.
Si vous traitez tous les espaces (espace, tabulation verticale, tabulation horizontale, retour à la ligne, saut de page, nouvelle ligne) comme des espaces, vous pouvez utiliser l'expression régulière suivante pour remplacer tout nombre d'espaces blancs consécutifs avec un seul espace:
str = str.replaceAll("\\s+"," ");
Mais si vous souhaitez remplacer deux espaces blancs consécutifs par un seul espace, procédez comme suit:
str = str.replaceAll("\\s{2}"," ");
salut le plus rapide (mais pas la plus jolie façon) je trouve est
while (cleantext.indexOf(" ") != -1)
cleantext = StringUtils.replace(cleantext, " ", " ");
cela tourne très vite sur Android en face d'une regex
Essayez ceci - vous devez import Java.util.regex.*;
Pattern pattern = Pattern.compile("\\s+");
Matcher matcher = pattern.matcher(string);
boolean check = matcher.find();
String str = matcher.replaceAll(" ");
Où string
est votre chaîne sur laquelle vous devez supprimer les espaces blancs en double
String str = " Text with multiple spaces ";
str = org.Apache.commons.lang3.StringUtils.normalizeSpace(str);
// str = "Text with multiple spaces"
Bien qu'il soit trop tard, j'ai trouvé une meilleure solution (qui fonctionne pour moi) qui remplacera tous les espaces blancs consécutifs du même type par un espace blanc de ce type. C'est:
Hello!\n\n\nMy World
sera
Hello!\nMy World
Notez qu'il reste des espaces blancs de début et de fin. Donc ma solution complète est:
str = str.trim().replaceAll("(\\s)+", "$1"));
Ici, trim()
remplace toutes les chaînes d'espaces blancs de début et de fin par "". (\\s)
est destiné à la capture de \\s
(c'est-à-dire des espaces tels que '', '\ n', '\ t') dans groupe n ° 1. Le signe +
sert à faire correspondre un ou plusieurs jetons précédents. Ainsi, (\\s)+
peut être constitué de caractères consécutifs (1 ou plus) parmi n’importe quel caractère d’espace blanc ('', '\ n' ou '\ t'). $1
est destiné à remplacer les chaînes correspondantes par la chaîne groupe # 1 (qui ne contient qu'un seul caractère d'espace blanc) du type correspondant (c'est-à-dire le seul caractère d'espace blanc correspondant). La solution ci-dessus va changer comme ceci:
Hello!\n\n\nMy World
sera
Hello!\nMy World
Je n'ai pas trouvé la solution ci-dessus ici, donc je l'ai postée.
Vous pouvez également essayer d'utiliser String Tokenizer pour tout espace, onglet, nouvelle ligne, etc. Un moyen simple est,
String s = "Your Text Here";
StringTokenizer st = new StringTokenizer( s, " " );
while(st.hasMoreTokens())
{
System.out.print(st.nextToken());
}
Si vous voulez vous débarrasser de tous les espaces superposés, faites comme ceci:
// \\A = Start of input boundary
// \\z = End of input boundary
string = string.replaceAll("\\A\\s+(.*?)\\s+\\z", "$1");
Ensuite, vous pouvez supprimer les doublons en utilisant les autres stratégies énumérées ici:
string = string.replaceAll("\\s+"," ");