2010-12-13 13 views
9

Voglio rimuovere tutti i seguenti caratteri dalla mia stringaCome faccio a rimuovere alcuni caratteri dal mio String

"> [], -"

in questo momento sto facendo questo. ma ci deve essere un modo più efficiente

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

Beh, si potrebbe usare espressioni regolari, ma poi avresti per sfuggire caratteri speciali. E di che tipo di efficienza stai parlando? Runtime o il tuo (cioè linee di codice)? –

+0

Preoccuparsi per l'"efficienza" di questo particolare problema indica una prematura ottimizzazione; Dubito fortemente che * questo * metodo sia il collo di bottiglia della vostra applicazione. Prenditi il ​​tuo tempo per scoprire dove la tua applicazione è * veramente * lenta e ha bisogno di ottimizzazione. – Bombe

risposta

9

Utilizzare un'espressione regolare che descrive tutti i caratteri che si desidera sostituire, con il metodo che sostituisce tutto corrispondenti al regex:

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

(modificato: non credo <> si suppone essere sfuggito, in realtà . e ho dimenticato di raddoppiare le barre inverse in quanto essi saranno interpretati due volte:. una volta dal compilatore Java, e di nuovo dal motore di espressioni regolari)

+0

funziona come un fascino. Grazie. – code511788465541441

+0

Cosa succede se voglio mantenere le nuove linee? – Mann

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

Le barre rovesciate sono per sfuggire alla '[' perché il primo argomento è in realtà un'espressione regolare.

+0

Mi picchia, +1 –

+0

non funziona – code511788465541441

+0

Uhh ... vorrai avvolgere quei personaggi in una classe di caratteri ('[]') perché stai cercando qualcuno di loro da solo, non una sequenza di tutti loro in fila ... –

0

È possibile scorrere ciclicamente ciascun carattere, accodandoli uno ad uno a un oggetto StringBuilder() a meno che non corrispondano a uno dei caratteri che si stanno rimuovendo.

Ma non sono sicuro che sarebbe molto più veloce.

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

tipo di opere ma la sua rimozione molto più di quanto voglio. ha rimosso alm ost di tutti i dati – code511788465541441

+0

@ user521180: modificato un po ', prova ancora una volta. Puoi darci un campione di dati se ancora non funziona come volevi? – darioo

2

Utilizzando i metodi/replaceAll sostituire provoca un nuovo modello di essere compilato ogni volta Quindi, se lo fai più volte, ti consiglio caldamente di eseguire il looping dei personaggi o di creare una singola espressione regolare da usare ripetutamente.

+0

Si prega di non ripetere in loop i personaggi da soli; ma "crea la regex" (una nuova istanza di 'Pattern', in Java) se questo è importante. Vedere il documento Java per java.util.regex.Pattern, che fornisce anche una panoramica di base della sintassi delle espressioni regolari supportata dal motore regex di Java. –

2

Più efficiente in termini di prestazioni: sì. Non è possibile "cancellare" i caratteri da una stringa in modo da non crearne uno nuovo. Prendere in considerazione una soluzione basata 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

Bella soluzione per questo problema! – Rahul

6

È possibile utilizzare il metodo della classe StringreplaceAll.

È possibile creare una classe di caratteri costituita dai caratteri che si desidera eliminare. E la stringa di sostituzione sarà vuota stringa "".

Ma i caratteri che si desidera eliminare e che si inseriscono nella classe di caratteri potrebbero essere regex meta-caratteri e quindi devono essere sottoposti a escape. È possibile sfuggire manualmente come mostrano molte risposte, in alternativa è possibile utilizzare il metodo Pattern.quote().

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

See it

Problemi correlati