web-dev-qa-db-fra.com

Suppression des espaces des chaînes en Java

J'ai une chaîne comme celle-ci: 

mysz = "name=john age=13 year=2001";

Je veux supprimer les espaces dans la chaîne. J'ai essayé trim() mais cela supprime uniquement les espaces avant et après toute la chaîne. J'ai aussi essayé replaceAll("\\W", "") mais le = est également supprimé.

Comment puis-je réaliser une chaîne avec:

mysz2 = "name=johnage=13year=2001"
612
zyamat

st.replaceAll("\\s+","") supprime tous les espaces et les caractères non visibles (onglet, par exemple, \n).


st.replaceAll("\\s+","") et st.replaceAll("\\s","") produisent le même résultat.

La deuxième expression rationnelle est 20% plus rapide que la première, mais plus le nombre d'espaces consécutifs augmente, plus le premier est performant.


Attribuez la valeur à une variable, si elle n'est pas utilisée directement:

st = st.replaceAll("\\s+","")
1194
Gursel Koca
replaceAll("\\s","")

\w = Tout ce qui est un caractère Word

\W = Tout ce qui n'est pas un caractère Word (y compris la ponctuation, etc.)

\s = Tout ce qui est un caractère d'espace (y compris l'espace, les caractères de tabulation, etc.)

\S = Tout ce qui n'est pas un caractère d'espacement (y compris les lettres et les chiffres, ainsi que la ponctuation, etc.)

(Edit: comme indiqué, vous devez échapper à la barre oblique inverse si vous souhaitez que \s atteigne le moteur des expressions rationnelles, ce qui entraîne \\s.)

228
nitro2k01

La réponse la plus correcte à la question est:

String mysz2 = mysz.replaceAll("\\s","");

Je viens d'adapter ce code à partir des autres réponses. Je le poste car, en plus d'être exactement ce que la question a demandé, cela montre également que le résultat est renvoyé sous la forme d'une nouvelle chaîne, la chaîne d'origine n'est pas modifiée comme certaines des réponses l'impliquent.

(Les développeurs Java expérimentés peuvent dire "bien sûr, vous ne pouvez pas réellement modifier une chaîne", mais le public cible de cette question risque de ne pas le savoir.)

96
Fletch

Que diriez-vous de replaceAll("\\s", ""). Référez-vous ici .

55
Erkan Haspulat

Si vous devez également supprimer les espaces incassables, vous pouvez mettre à jour votre code comme suit:

st.replaceAll("[\\s|\\u00A0]+", "");
30
v.nivuahc

StringUtils de Apache commons est un moyen de gérer les manipulations de String.

String withoutWhitespace = StringUtils.deleteWhitespace(whitespaces);

Vous pouvez le trouver ici . Commons-lang en inclut beaucoup plus et est bien pris en charge.

29
jahir

Si vous préférez les utilitaires aux expressions rationnelles, il existe une méthode trimAllWhitespace (String) in StringUtils dans Spring Framework.

27
kamczak

Gursel Koca vous a déjà donné la bonne réponse, mais j'estime qu'il y a de bonnes chances que ce ne soit pas ce que vous voulez vraiment faire. Pourquoi ne pas analyser les valeurs-clés?

import Java.util.Enumeration;
import Java.util.Hashtable;

class SplitIt {
  public static void main(String args[])  {

    String person = "name=john age=13 year=2001";

    for (String p : person.split("\\s")) {
      String[] keyValue = p.split("=");
      System.out.println(keyValue[0] + " = " + keyValue[1]);
    }
  }
}

sortie:
nom = john
âge = 13
année = 2001 

25
Jonas Elfström

Tu devrais utiliser

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

au lieu de:

s.replaceAll("\\s", "");

De cette façon, cela fonctionnera avec plus d'un espace entre chaque chaîne. Le signe + dans la regex ci-dessus signifie "un ou plusieurs\s"

18
Varejones

Vous pouvez le faire si simplement en

String newMysz = mysz.replace(" ","");
7
Vinod Ranga

Pour ce faire, le moyen le plus simple consiste à utiliser la classe org.Apache.commons.lang3.StringUtils de la bibliothèque commons-lang3 telle que "commons-lang3-3.1.jar" par exemple.

Utilisez la méthode statique "StringUtils.deleteWhitespace(String str)" sur votre chaîne d’entrée. Elle vous renverra une chaîne après en avoir supprimé tous les espaces. J'ai essayé votre exemple de chaîne "name=john age=13 year=2001" & elle m'a renvoyé exactement la chaîne que vous vouliez - "name=johnage=13year=2001". J'espère que cela t'aides.

6
Ayaskant
public static void main(String[] args) {        
    String s = "name=john age=13 year=2001";
    String t = s.replaceAll(" ", "");
    System.out.println("s: " + s + ", t: " + t);
}

Output:
s: name=john age=13 year=2001, t: name=johnage=13year=2001
6
avngr
String a="string with                multi spaces ";
//or this 
String b= a.replaceAll("\\s+"," ");
String c= a.replace("    "," ").replace("   "," ").replace("  "," ").replace("   "," ").replace("  "," ");

// ça marche bien avec n'importe quel espace * n'oubliez pas l'espace dans Sting b

4
fatsoft

Utiliser Pattern And Matcher est plus dynamique.

import Java.util.regex.Matcher;
import Java.util.regex.Pattern;

public class RemovingSpace {

    /**
     * @param args
     * Removing Space Using Matcher
     */
    public static void main(String[] args) {
        String str= "jld fdkjg jfdg ";
        String pattern="[\\s]";
        String replace="";

        Pattern p= Pattern.compile(pattern);
        Matcher m=p.matcher(str);

        str=m.replaceAll(replace);
        System.out.println(str);    
    }
}
3
jayesh

En Java, nous pouvons effectuer l'opération suivante:

String pattern="[\\s]";
String replace="";
part="name=john age=13 year=2001";
Pattern p=Pattern.compile(pattern);
Matcher m=p.matcher(part);
part=m.replaceAll(replace);
System.out.println(part);

pour cela, vous devez importer les packages suivants dans votre programme:

import Java.util.regex.Matcher;
import Java.util.regex.Pattern;

j'espère que cela vous aidera.

3
user27

Utilisez mysz.replaceAll("\\s+","");

3
Mohammad Raza

\W signifie "caractère autre que Word". Le modèle pour les caractères d'espacement est \s. Ceci est bien documenté dans le Pattern javadoc .

3
JB Nizet
mysz = mysz.replace(" ","");

D'abord avec de l'espace, ensuite sans espace. 

Ensuite c'est fait. 

2
user2357526
import Java.util.*;
public class RemoveSpace {
    public static void main(String[] args) {
        String mysz = "name=john age=13 year=2001";
        Scanner scan = new Scanner(mysz);

        String result = "";
        while(scan.hasNext()) {
            result += scan.next();
        }
        System.out.println(result);
    }
}
2
Tony Nguyen

Utiliser Apache string util class est préférable d'éviter NullPointerException

org.Apache.commons.lang3.StringUtils.replace("abc def ", " ", "")

Sortie  

abcdef
2
sendon1982

Il existe d'autres chars d'espace dans les chaînes. Ainsi, nous aurons peut-être besoin de remplacer les caractères par des chaînes.

Ex: ESPACE SANS RUPTURE, ESPACE TROIS PERSONNES, ESPACE DE PUNCTUATION

Voici la liste des caractères d'espacement http://jkorpela.fi/chars/spaces.html

Nous devons donc modifier

\ u2004 nous pour un espace à trois pour cent

s.replaceAll ("[\ u0020\u2004]", "")

1
Rakesh Chaudhari

il existe de nombreuses façons de résoudre ce problème .. Vous pouvez utiliser la fonction de division ou remplacer la fonction de chaîne.

pour plus d'informations, référez-vous au problème smilliar http://techno-terminal.blogspot.in/2015/10/how-to-remove-spaces-from-given-string.html

1
satish

Pour supprimer des espaces dans votre exemple, voici une autre façon de le faire:

String mysz = "name=john age=13 year=2001";
String[] test = mysz.split(" ");
mysz = String.join("", mysz);

Cela permet de le convertir en tableau avec les espaces comme séparateurs, puis de combiner les éléments du tableau sans les espaces.

Cela fonctionne plutôt bien et est facile à comprendre. 

1
Megawatt

Séparez chaque groupe de texte dans sa propre sous-chaîne, puis concaténez ces sous-chaînes. ex. 

public Address(String street, String city, String state, String Zip ) {
               this.street = street;
    this.city = city;
    //Now checking to make sure that state has no spaces...
    int position = state.indexOf(" ");
    if(position >=0) {
        //now putting state back together if it has spaces...
        state = state.substring(0, position) + state.substring(position + 1);  
    } 
0
user9832813

Vous pouvez également consulter le code Java ci-dessous. Les codes suivants n'utilisent aucune méthode "intégrée".

/**
 * Remove all characters from an alphanumeric string.
 */
public class RemoveCharFromAlphanumerics {

    public static void main(String[] args) {

        String inp = "01239Debashish123Pattn456aik";

        char[] out = inp.toCharArray();

        int totint=0;

        for (int i = 0; i < out.length; i++) {
            System.out.println(out[i] + " : " + (int) out[i]);
            if ((int) out[i] >= 65 && (int) out[i] <= 122) {
                out[i] = ' ';
            }
            else {
                totint+=1;
            }

        }

        System.out.println(String.valueOf(out));
        System.out.println(String.valueOf("Length: "+ out.length));

        for (int c=0; c<out.length; c++){

            System.out.println(out[c] + " : " + (int) out[c]);

            if ( (int) out[c] == 32) {
                System.out.println("Its Blank");
                 out[c] = '\'';
            }

        }

        System.out.println(String.valueOf(out));

        System.out.println("**********");
        System.out.println("**********");
        char[] whitespace = new char[totint];
        int t=0;
        for (int d=0; d< out.length; d++) {

            int fst =32;



            if ((int) out[d] >= 48 && (int) out[d] <=57 ) {

                System.out.println(out[d]);
                whitespace[t]= out[d];
                t+=1;

            }

        }

        System.out.println("**********");
        System.out.println("**********");

        System.out.println("The String is: " + String.valueOf(whitespace));

    }
}

Contribution:

String inp = "01239Debashish123Pattn456aik";

Sortie:

The String is: 01239123456
0
Deb

Lorsque vous utilisez st.replaceAll("\\s+","") dans Kotlin , veillez à envelopper "\\s+" avec Regex:

"myString".replace(Regex("\\s+"), "")
0
Jemshit Iskenderov
public static String removeWhiteSpaces(String str){
        String s = "";
        char[] arr = str.toCharArray();
        for (int i = 0; i < arr.length; i++) {
            int temp = arr[i];
            if(temp!=32 && temp!=9){ // 32 ASCII for space and 9 is for Tab
                s+=arr[i];
            }
        }
        return s;
    }

Cela pourrait aider.

0
Rajesh Gurbani

Les espaces blancs peuvent être supprimés à l’aide de la fonction isWhitespace de Character Class.

public static void main(String[] args) {
    String withSpace = "Remove white space from line";
    StringBuilder removeSpace = new StringBuilder();

    for (int i = 0; i<withSpace.length();i++){
        if(!Character.isWhitespace(withSpace.charAt(i))){
            removeSpace=removeSpace.append(withSpace.charAt(i));
        }
    }
    System.out.println(removeSpace);
}
0
Abdur Rahman