Comment supprimer les espaces blancs en double dans string en utilisant Java?

Comment supprimer les espaces blancs en double (y compris les onglets, les lignes, les espaces, etc.)..) dans une chaîne utilisant Java?

138
demandé sur aioobe 2010-10-18 16:09:38

9 réponses

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 ça veut dire \s+ ?

\s+ est une expression régulière. \s correspond à un espace, tabulation, nouvelle ligne, retour chariot, saut de page ou onglet vertical, et + dit "un ou plusieurs de ces". Ainsi, le code ci-dessus va s'effondrer tous les "espaces sous-chaînes" de plus d'un caractère, avec un seul caractère espace.


Source: Java: la Suppression doubles espaces dans les chaînes

361
répondu aioobe 2016-10-29 04:20:53

vous pouvez utiliser le regex

(\s)

et

remplacer par .

code Java:

str = str.replaceAll("(\s)\1","");

Si l'entrée est "foo\t\tbar " , vous obtiendrez "foo\tbar " en sortie

Mais si l'entrée est "foo\t bar" elle restera inchangé car il n'a pas d'espaces consécutifs caractères.

si vous traitez tous les espaces caractères (espace, onglet vertical, onglet horizontal, retour de chariot, alimentation de formulaire, nouvelle ligne) comme espace, vous pouvez utiliser le regex suivant pour remplacer n'importe quel nombre d'espace blanc consécutif avec un seul espace:

str = str.replaceAll("\s+"," ");

mais si vous voulez remplacer deux espaces blancs consécutifs par un seul espace, vous devez faire:

str = str.replaceAll("\s{2}"," ");
23
répondu codaddict 2010-10-18 13:40:09

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 dupliqués

9
répondu Sachin Shanbhag 2010-10-18 12:12:58

salut le plus rapide (mais pas la plus jolie façon), j'ai trouvé est

while (cleantext.indexOf("  ") != -1)
  cleantext = StringUtils.replace(cleantext, "  ", " ");

c'est assez rapide sur android en face d'un regex

9
répondu wutzebaer 2013-07-21 01:52:42
String str = "   Text    with    multiple    spaces    ";
str = org.apache.commons.lang3.StringUtils.normalizeSpace(str);
// str = "Text with multiple spaces"
7
répondu oleg.cherednik 2016-12-22 21:35:10

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 avec un espace blanc de son type. C'est-à-dire:

   Hello!\n\n\nMy    World  

sera

 Hello!\nMy World 

remarquez qu'il y a encore des espaces blancs en tête et en queue. Donc ma solution complète est:

str = str.trim().replaceAll("(\s)+", ""));

remplace trim() par"". (\s) est pour capturer \s (qui est des espaces blancs tels que', '\n',' \T') dans Groupe #1 . Le signe + est pour correspondre à 1 ou plusieurs jetons précédents. Ainsi (\s)+ peut être des caractères consécutifs (1 ou plus) parmi n'importe quel caractère d'espace blanc simple (' ', '\n' ou '\t'). est destiné à remplacer les chaînes correspondantes par la chaîne Groupe #1 (qui ne contient qu'un caractère d'espace blanc) du type correspondant (c'est-à-dire le caractère d'espace blanc simple qui a correspondu). La solution ci-dessus va changer comme ceci:

   Hello!\n\n\nMy    World  

sera

Hello!\nMy World

Je n'ai pas trouvé ma solution ci-dessus ici donc je l'ai posté.

5
répondu arnobpl 2015-02-12 22:37:19

si vous voulez vous débarrasser de tous les blancs externes menant et traînant alors vous voulez faire quelque chose comme ceci:

// \A = Start of input boundary
// \z = End of input boundary 
string = string.replaceAll("\A\s+(.*?)\s+\z", "");

ensuite, vous pouvez supprimer les doublons en utilisant les autres stratégies énumérées ici:

string = string.replaceAll("\s+"," ");
0
répondu jonnysamps 2013-05-28 00:03:13

vous pouvez également essayer D'utiliser la chaîne Tokeniser, pour n'importe quel espace, onglet, newline, et tout. Une façon simple est,

String s = "Your Text Here";        
StringTokenizer st = new StringTokenizer( s, " " );
while(st.hasMoreTokens())
{
    System.out.print(st.nextToken());
}
0
répondu imvp 2015-09-15 12:41:53

cela peut être possible en trois étapes:

  1. convertissez la chaîne en tableau de caractères (ToCharArray)
  2. s'Appliquent pour la boucle sur le personnage de tableau
  3. puis appliquer chaîne remplacer fonction (Remplacer ("sting you want to replace", "chaîne d'origine"));
-10
répondu Dheeraj at Techreuters 2011-08-21 14:11:07