Question 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 blancs dans la chaîne. j'ai essayé trim() mais cela supprime uniquement les espaces avant et après la chaîne entière. J'ai aussi essayé replaceAll("\\W", "") mais ensuite = est également retiré.

Comment puis-je obtenir une chaîne avec:

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

576
2018-03-28 07:22


origine


Réponses:


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


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

La deuxième regex est 20% plus rapide que la première, mais au fur et à mesure que le nombre d'espaces consécutifs augmente, le premier se comporte mieux que le second.


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

st = st.replaceAll("\\s+","")

1138
2018-03-28 07:24



replaceAll("\\s","")

\w = Tout ce qui est un caractère de mot

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

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

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

(Edit: Comme indiqué, vous devez échapper à la barre oblique inverse si vous voulez \s pour atteindre le moteur regex, résultant en \\s.)


219
2018-03-28 07:26



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 l'affiche parce qu'en plus d'être exactement ce que la question a demandé, cela démontre aussi que le résultat est renvoyé en tant que nouvelle chaîne, la chaîne d'origine n'est pas modifiée comme certaines réponses impliquent en quelque sorte.

(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 peut très bien ne pas le savoir.)


93
2018-04-16 10:47



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


55
2018-03-28 07:25



Si vous devez également supprimer des espaces incassables, vous pouvez mettre à jour votre code de la manière suivante:

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

27
2017-11-14 14:13



Si vous préférez les classes d'utilitaires aux expressions régulières, il existe une méthode trimAllWhitespace (Chaîne) dans StringUtils dans Spring Framework.


26
2018-01-25 11:51



Un moyen de gérer les manipulations de String est StringUtils à partir des communs Apache.

String withoutWhitespace = StringUtils.deleteWhitespace(whitespaces);

Tu peux le trouver ici. commons-lang comprend beaucoup plus et est bien supporté.


26
2017-07-20 17:34



Vous avez déjà la bonne réponse de Gursel Koca mais je crois 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 à la place?

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
2018-03-28 07:24