Voglio rimuovere caratteri speciali come:
- + ^ . : ,
da una stringa utilizzando Java.
Voglio rimuovere caratteri speciali come:
- + ^ . : ,
da una stringa utilizzando Java.
replaceAllvia. Se hai requisiti più esoterici, modifica la domanda. :)
replaceAllper loro, o fai un'analisi la stringa, aggiungi i caratteri che non sono i caratteri che vuoi estrarre a un'altra stringa e alla fine fai semplicemente un + = a una stringa che restituirai.
deleteChars.apply( fromString, "-+^.:," );- trova deleteChars qui
Risposte:
Dipende da cosa definisci caratteri speciali, ma prova replaceAll(...):
String result = yourString.replaceAll("[-+.^:,]","");
Nota che il file ^ carattere non deve essere il primo dell'elenco, poiché dovresti quindi eseguire l'escape o significherebbe "qualsiasi tranne questi caratteri".
Un'altra nota: il -carattere deve essere il primo o l'ultimo della lista, altrimenti dovresti uscire da esso o definirebbe un intervallo (ad es. :-,Significherebbe "tutti i caratteri nell'intervallo da :a ,).
Così, al fine di mantenere la coerenza e non dipendere dal posizionamento di carattere, si potrebbe desiderare di fuggire tutti quei personaggi che hanno un significato speciale nelle espressioni regolari (la seguente lista non è completa, in modo da essere a conoscenza di altri personaggi come (, {, $ etc.) :
String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");
Se vuoi eliminare tutta la punteggiatura e i simboli, prova questa regex: \p{P}\p{S}(tieni presente che nelle stringhe Java dovresti sfuggire alle barre indietro:"\\p{P}\\p{S}" .
Un terzo modo potrebbe essere qualcosa del genere, se puoi definire esattamente cosa dovrebbe essere lasciato nella tua stringa:
String result = yourString.replaceAll("[^\\w\\s]","");
Ciò significa: sostituire tutto ciò che non è un carattere di parola (az in ogni caso, 0-9 o _) o spazi bianchi.
Modifica: tieni presente che ci sono un paio di altri modelli che potrebbero rivelarsi utili. Tuttavia, non posso spiegarli tutti, quindi dai un'occhiata alla sezione di riferimento di regular-expressions.info .
Ecco un'alternativa meno restrittiva all'approccio "definire i caratteri consentiti", come suggerito da Ray:
String result = yourString.replaceAll("[^\\p{L}\\p{Z}]","");
L'espressione regolare corrisponde a tutto ciò che non è una lettera in qualsiasi lingua e non un separatore (spazi bianchi, interruzioni di riga ecc.). Nota che non puoi usare[\P{L}\P{Z}] (la P maiuscola significa non avere quella proprietà), poiché ciò significherebbe "tutto ciò che non è una lettera o non uno spazio", che corrisponde quasi a tutto, poiché le lettere non sono spazi e viceversa.
Ulteriori informazioni su Unicode
Alcuni caratteri Unicode sembrano causare problemi a causa di diversi modi possibili per codificarli (come un singolo punto di codice o una combinazione di punti di codice). Fare riferimento a regular-expressions.info per ulteriori informazioni.
[\P{L}]
-carattere deve essere il primo o l'ultimo nell'elenco o deve essere preceduto da un escape.
[^\\p{L}\\p{Z}]sembra eliminare anche gli Umlaut tedeschi (ä, ö, ü) (almeno lo fa per me: /), quindi "L'espressione regolare corrisponde a tutto ciò che non è una lettera in qualsiasi lingua" non sembra essere corretto al 100%
String result = yourString.replaceAll("[^\w\s]","");fa un erroreInvalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
Questo sostituirà tutti i caratteri tranne quello alfanumerico
replaceAll("[^A-Za-z0-9]","");
Come descritto qui http://developer.android.com/reference/java/util/regex/Pattern.html
I pattern sono espressioni regolari compilate. In molti casi, i metodi di convenienza, come
String.matches,String.replaceAlleString.splitsarà preferibile, ma se avete bisogno di fare un sacco di lavoro con la stessa espressione regolare, può essere più efficace per compilare una volta e riutilizzarlo. La classe Pattern e il suo compagno, Matcher, offrono anche più funzionalità rispetto alla piccola quantità esposta da String.
public class RegularExpressionTest {
public static void main(String[] args) {
System.out.println("String is = "+getOnlyStrings("!&(*^*(^(+one(&(^()(*)(*&^%$#@!#$%^&*()("));
System.out.println("Number is = "+getOnlyDigits("&(*^*(^(+91-&*9hi-639-0097(&(^("));
}
public static String getOnlyDigits(String s) {
Pattern pattern = Pattern.compile("[^0-9]");
Matcher matcher = pattern.matcher(s);
String number = matcher.replaceAll("");
return number;
}
public static String getOnlyStrings(String s) {
Pattern pattern = Pattern.compile("[^a-z A-Z]");
Matcher matcher = pattern.matcher(s);
String number = matcher.replaceAll("");
return number;
}
}
Risultato
String is = one
Number is = 9196390097
Prova il replaceAll()metodo della Stringclasse.
A proposito, ecco il metodo, il tipo restituito ei parametri.
public String replaceAll(String regex,
String replacement)
Esempio:
String str = "Hello +-^ my + - friends ^ ^^-- ^^^ +!";
str = str.replaceAll("[-+^]*", "");
Dovrebbe rimuovere tutti i caratteri {'^', '+', '-'} che volevi rimuovere!
Per rimuovere il carattere speciale
String t2 = "!@#$%^&*()-';,./?><+abdd";
t2 = t2.replaceAll("\\W+","");
L'output sarà: abdd.
Funziona perfettamente.
Usa il String.replaceAll()metodo in Java.
replaceAll dovrebbe essere abbastanza buono per il tuo problema.
Stringclasse? In particolare, cerca la parola "regex"; ci sono alcuni metodi e un po 'di riflessione dovrebbe dirti come procedere ... :)