2010-11-09 8 views
2

J'ai utilisé la ligne suivante pour supprimer tous les signes et espaces $ dans un données donné « DATA »:

String temp_data = DATA.replaceAll("$", "").replaceAll(" ", ""); 

Mais il ne supprime pas les signes $, seuls les espaces. Est-ce que quelqu'un a une idée de pourquoi?

Merci, Binyamin

Répondre

9

Le premier paramètre est replaceAll prend une expression régulière, et le moteur de regex traite $ comme un caractère spécial qui signifie la fin de la ligne. Échapper avec \ comme ceci:

String temp_data = DATA.replaceAll("\\$", "").replaceAll(" ", ""); 

Voici un exemple en utilisant replaceAll et remplacer:

import junit.framework.TestCase; 

public class ReplaceAllTest extends TestCase { 

    private String s = "asdf$zxcv"; 

    public void testReplaceAll() { 
     String newString = s.replaceAll("\\$", "X"); 
     System.out.println(newString); 
     assertEquals("asdfXzxcv", newString); 
    } 

    public void testReplace() { 
     String newString =s.replace("$", ""); 
     System.out.println(newString); 
     assertEquals("asdfzxcv", newString); 
    } 
} 
+0

Oui, cela fonctionne et explique le problème, mais il n'y a pas besoin d'utiliser 'replaceAll (String regExp) 'si vous voulez éliminer les caractères uniques. –

+0

Merci. J'ai bien travaillé pour moi. – MByD

+0

@Andreas_D: vous avez raison, j'ai ajouté un exemple en utilisant la méthode de remplacement. –

4

replaceAll prend une expression régulière - et "$" a une signification particulière dans les expressions régulières.

Essayez juste replace à la place:

String temp_data = DATA.replace("$", "").replace(" ", ""); 
+0

Mais remplacer prend un seul omble chevalier et met un seul char, donc je ne peux pas l'utiliser pour supprimer les caractères, uniquement pour les remplacer par d'autres caractères. – MByD

+0

@MByD: Non, il y a une surcharge prenant deux CharSequences (comme des chaînes). Avez-vous essayé d'exécuter le code exact que j'ai fourni? –

+0

Oui. J'ai essayé et j'ai été jeté sur cette ligne. – MByD

3

String.replaceAll utilise une expression régulière pour faire correspondre les caractères qui doivent être remplacés. Dans les expressions régulières cependant, $ est un symbole spécial signalant la fin de la chaîne, de sorte qu'il n'est pas reconnu comme le caractère lui-même.

Vous pouvez échapper le symbole $, ou tout simplement utiliser la méthode String.replace qui fonctionne sur une chaîne de caractères:

String temp_data = DATA.replace("$", "").replace(" ", ""); 

// or 
String temp_data = DATA.replaceAll("\\$", "").replaceAll(" ", ""); 

// or even 
String temp_data = DATA.replaceAll("\\$| ", ""); 
Questions connexes