Comment supprimer les espaces blancs en double (y compris les onglets, les retours à la ligne, les espaces, etc ...) dans une chaîne en utilisant Java?Comment supprimer les espaces blancs en double dans une chaîne en utilisant Java?
Répondre
Comme ceci:
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 signifie \s+
?
est une expression régulière. \s
correspond à un espace, une tabulation, une nouvelle ligne, un retour chariot, un saut de page ou un onglet vertical, et +
indique "un ou plusieurs d'entre eux". Ainsi, le code ci-dessus écrase toutes les "sous-chaînes d'espaces" de plus d'un caractère, avec un caractère espace unique.
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
Vous pouvez utiliser la regex
(\s)\1
et
le remplacer 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 l'entrée est "foo\t bar"
il ne changera pas parce qu'elle n'a pas de caractères blancs consécutifs.
Si vous traitez tous les caractères blancs (espace, tabulation verticale, tabulation horizontale, retour de chariot, de forme, nouvelle ligne) que l'espace que vous pouvez ensuite utiliser l'expression rationnelle suivante pour remplacer tout nombre d'espaces consécutifs avec un seul espace:
str = str.replaceAll("\\s+"," ");
Mais si vous voulez remplacer deux espaces consécutifs avec un seul espace que vous devez faire:
str = str.replaceAll("\\s{2}"," ");
Cela peut être possible en trois étapes:
- Convertir la chaîne pour tableau de caractères (ToCharArray)
- Appliquer boucle sur la matrice de charater
- Appliquez ensuite la chaîne remplacer la fonction (Remplacer (« vous piquer à remplacer », « chaîne d'origine »));
Ce n'est pas une bonne solution, tomber dans un tableau char ne résout rien. Vous n'êtes pas en train d'expliquer comment faire le remplacement, qui est le cœur du problème. Aussi, veuillez ** ne pas ** publier des liens complètement indépendants. Vous serez marqué comme un spammeur si vous le faites. – Mat
Si vous voulez vous débarrasser de tous les espaces avant et étrangers alors que vous voulez faire quelque chose 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 avec les autres stratégies énumérées ici:
string = string.replaceAll("\\s+"," ");
salut i est trouvé
while (cleantext.indexOf(" ") != -1)
cleantext = StringUtils.replace(cleantext, " ", " ");
le plus rapide (mais pas la plus jolie façon)
Fonctionne uniquement pour les espaces mais pas pour les autres espaces tels que les onglets et les retours à la ligne. – Pang
Je sais, vous devez ajouter plus de ces boucles en boucle pour d'autres entités. Mais ce code fonctionne beaucoup plus vite sur Android que ces regex, j'ai dû traiter des ebooks complets. – wutzebaer
Énormément plus rapide sur le bureau aussi. N'a pas testé pour une grosse chaîne, mais si vous prévoyez de l'exécuter sur beaucoup de petites chaînes c'est la réponse que vous recherchez. – Ivelate
Bien qu'il soit trop tard, j'ai trouvé une meilleure solution (qui fonctionne pour moi) qui remplacera tous les espaces blancs consécutifs de même type par un espace blanc de son type. C'est:
Hello!\n\n\nMy World
sera
Hello!\nMy World
avis il y a encore avant et arrière des espaces blancs. Donc, ma solution complète est:
str = str.trim().replaceAll("(\\s)+", "$1"));
Ici, trim()
remplace toutes les chaînes avant et arrière de l'espace blanc avec « ». (\\s)
est pour capturer \\s
(c'est-à-dire des espaces blancs tels que '', '\ n', '\ t') dans groupe # 1. Le signe +
sert à faire correspondre 1 ou plusieurs jetons précédents. Ainsi, (\\s)+
peut être des caractères consécutifs (1 ou plus) parmi tous les caractères d'espace blanc ('', '\ n' ou '\ t'). $1
est de remplacer les chaînes correspondantes par la chaîne groupe # 1 (qui contient seulement 1 caractère espace blanc) du type correspondant (c'est le caractère d'espace blanc unique qui a correspondu). La solution ci-dessus changera comme ceci:
Hello!\n\n\nMy World
sera
Hello!\nMy World
Je ne l'ai pas trouvé ma solution ci-dessus ici, donc je l'ai posté.
Vous pouvez également essayer d'utiliser String Tokeniser pour tout espace, onglet, nouvelle ligne, etc. Une façon simple est,
String s = "Your Text Here";
StringTokenizer st = new StringTokenizer(s, " ");
while(st.hasMoreTokens())
{
System.out.print(st.nextToken());
}
String str = " Text with multiple spaces ";
str = org.apache.commons.lang3.StringUtils.normalizeSpace(str);
// str = "Text with multiple spaces"
pourquoi il n'y a pas de méthode replaceAll ?? Est-ce que le dernier JDK supporte cette méthode ??? –
@SuhrobSamiev - String.replaceAll() est en Java depuis le JDK 1.4. http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#replaceAll(java.lang.String, java.lang.String) –
J'aimerais pouvoir ajouter plus de +1 pour l'explication géniale de \ s +. – Cyntech