2010-03-01 6 views
4

J'écris un analyseur pour certains fichiers LISP. J'essaie de me débarrasser des espaces blancs dans une chaîne. Le contenu de la chaîne sont le long des lignes de:Suppression d'espaces dans une chaîne Java?

  :FUNCTION (LAMBDA 
        (DELTA 
        PLASMA-IN-0) 
       (IF 
        (OR 
        (>= 
        #61=(+ 
         (* 
          1 
          DELTA) 
         PLASMA-IN-0) 
        100) 
        (<= 
        #61# 
        0)) 
        PLASMA-IN-0 
        #61#)) 

Les onglets sont tous imprimés en 4 espaces dans le fichier, donc je veux me débarrasser de ces onglets principaux.

J'ai essayé de le faire: string.replaceAll("\\s{4}", " ") - mais il n'a eu aucun effet du tout sur la corde.

Est-ce que quelqu'un sait ce que je fais mal? Est-ce parce que c'est une chaîne multi-ligne?

Merci

+2

Rappelez-vous que dans Java Les chaînes sont immuables, donc 'String.replaceAll()' renvoie la chaîne résultante sans modifier la chaîne d'origine. Assurez-vous de faire quelque chose comme 'String result = original.replaceAll (...)'. –

Répondre

8
String.trim(); 

devrait fonctionner.

+1

Merci, ça a marché. Toujours pas pourquoi l'autre n'a pas bien – bcoughlan

1

Votre expression régulière d'origine ne fonctionne pas parce que vous avez oublié d'échapper à la barre oblique inverse. Cela devrait faire ce que vous essayez de faire à l'origine:

string.replaceAll("\\s{4}", " ") 

EDIT: Je ne savais pas que vous ne l'avez pas, en fait, oublier d'échapper à la barre oblique inverse, et que le débordement de pile « mangé » l'un des votre barre oblique inverse, comme Alan Moore a souligné dans l'un des commentaires à cette réponse (la seule différence entre « \ s » et « \\s » est dans le texte des accents graves). Cela étant dit, ma réponse initiale ne va pas être d'une grande aide pour vous, alors ...

Pour que cela soit efficace, vous devez faire quelque chose avec la sortie de String#replaceAll, car elle renvoie un new String au lieu de modifier l'existant (Strings are immutable, William Brendel noté dans son commentaire à votre question).

string = string.replaceAll("\\s{4}", " ") 

Depuis cette réponse ne pas ajouter quoi que ce soit de la valeur, au lieu de le supprimer, je le fais Wiki de la communauté.

+1

Il n'écrire de cette façon, mais il a négligé de joindre que peu à contre-apostrophes, de sorte que le logiciel de mise en forme du site a mangé l'un des anti-slash. (Je viens d'ajouter les guillemets, de sorte que ça a l'air tout de suite.) Je suppose que William Brendel l'a bien compris, et qu'il n'assignait pas le résultat de 'replaceAll' à la variable. –

+0

Ah. Je n'ai pas réalisé qu'il y avait un problème avec SO. –

+0

Test: \\ s '\\ s' \ s' \ s' –

Questions connexes