2010-12-13 16 views
9

je veux supprimer tous les caractères suivants de ma chaîneComment puis-je supprimer certains personnages de ma chaîne

« > [], - »

au moment im faire. mais il doit y avoir un moyen plus efficace

newString = myString.replace(">","").replace("[","").replace("]","").... 
+0

Eh bien, vous pouvez utiliser regex, mais vous auriez à échapper les caractères spéciaux. Et de quel genre d'efficacité parlez-vous? Runtime ou le vôtre (c'est-à-dire des lignes de code)? –

+0

S'inquiéter de "l'efficacité" de ces problèmes particuliers indique une optimisation prématurée; Je doute fortement que * cette * méthode soit le goulot d'étranglement de votre application. Veuillez prendre votre temps pour savoir où votre application est * vraiment * lente et nécessite une optimisation. – Bombe

Répondre

9

Utilisez une expression rationnelle qui décrit tous les caractères que vous souhaitez remplacer, avec la méthode qui remplace tout correspondant à l'expression rationnelle:

newString = myString.replaceAll("[<>\\[\\],-]", ""); 

(edited: Je ne pense pas <> sont censés être échappé, en fait . et j'ai oublié de doubler les antislashs car ils seront interprétés deux fois. fois par le compilateur Java, et encore une fois par le moteur d'expression régulière)

+0

fonctionne comme un charme. Merci. – code511788465541441

+0

Et si je veux garder de nouvelles lignes? – Mann

1
newString = myString.replaceAll("[>\\[\\],-]", ""); 

Les antislashs doivent échapper à la « [ » parce que le premier argument est en fait une expression régulière.

+0

Battez-moi, +1 –

+0

cela ne fonctionne pas – code511788465541441

+0

Euh ... vous allez vouloir envelopper ces caractères dans une classe de caractères ('[]') parce que vous en cherchez un seul, pas une séquence de tous d'affilée ... –

0

Vous pouvez parcourir chaque caractère, en les ajoutant un par un à un StringBuilder() sauf s'ils correspondent à l'un des caractères que vous supprimez. Mais je ne suis pas sûr que ce serait beaucoup plus rapide.

1
newString = myString.replaceAll("[>\\[\\],-]", ""); 
+0

sorte de travaux mais son enlever beaucoup plus que je veux. il a supprimé la plupart de toutes les données – code511788465541441

+0

@ user521180: édité un peu, essayez encore une fois. Pouvez-vous nous donner un échantillon de données si cela ne fonctionne toujours pas comme vous le souhaitiez? – darioo

2

en utilisant les méthodes remplacer/ReplaceAll provoque un nouveau modèle à être compilé à chaque fois. Donc, si vous faites cela plusieurs fois, je vous suggérerais fortement soit de boucler les caractères ou de créer une seule expression régulière à utiliser à plusieurs reprises.

+0

Veuillez ne pas faire une boucle sur les caractères vous-même; mais faites "create the regex" (une nouvelle instance de 'Pattern', en Java) si cela est important. Voir le document Java pour java.util.regex.Pattern, qui donne également une vue d'ensemble de la syntaxe d'expression régulière supportée par le moteur de regex de Java. –

2

Performace plus sage: oui. Vous ne pouvez pas "supprimer" les caractères d'une chaîne de caractères, vous en avez donc créé un nouveau. Considérons une solution switch/case:

StringBuilder sb = new StringBuilder(); 
for (int i = 0; i < s.length(); i++) { 
    switch(s.getCharAt(i)) { 
    case '>': 
    case '[': 
    case ']': 
    case ',': 
    case '-': break; 
    default: sb.append(s.getCharAt(i)); 
    } 
} 
s = sb.toString(); 
+0

Belle solution pour ce problème! – Rahul

6

Vous pouvez utiliser la méthode replaceAll de la classe String.

Vous pouvez former une classe de caractères composée des caractères que vous souhaitez supprimer. Et la chaîne de remplacement sera la chaîne vide "". Mais les caractères que vous voulez supprimer dans la classe de caractères peuvent être des méta-caractères regex et doivent donc être échappés. Vous pouvez leur échapper manuellement autant de réponses que vous le souhaitez, vous pouvez également utiliser la méthode Pattern.quote().

String charToDel = ">[],-"; 
String pat = "[" + Pattern.quote(charToDel) + "]"; 
String str = "a>b[c]d,e-f"; 
str = str.replaceAll(pat,""); 

See it