web-dev-qa-db-fra.com

Comment supprimer les espaces blancs en double dans la chaîne en utilisant Java?

Comment supprimer les espaces blancs en double (y compris les tabulations, les nouvelles lignes, les espaces, etc.) d'une chaîne en utilisant Java?

145
brainless

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

373
aioobe

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}"," ");
24
codaddict

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

9
wutzebaer

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(" ");

string est votre chaîne sur laquelle vous devez supprimer les espaces blancs en double

9
Sachin Shanbhag
String str = "   Text    with    multiple    spaces    ";
str = org.Apache.commons.lang3.StringUtils.normalizeSpace(str);
// str = "Text with multiple spaces"
8
oleg.cherednik

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.

6
arnobpl

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());
}
0
imvp

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+"," ");
0
jonnysamps