2011-12-13 10 views
19

Ho una corda e quando cerco di eseguire il metodo replaceAll, sto ottenendo questo strano errore:Java String ReplaceAll metodo che genera un errore di ripetizione illegale?

String str = "something { } , op"; 
str = str.replaceAll("o", "\n"); // it works fine 
str = str.replaceAll("{", "\n"); // does not work 

e ottengo uno strano errore:

Exception in thread "main" java.util.regex.PatternSyntaxException: 
Illegal repetition { 

Come posso sostituire le occorrenze di "{"?

risposta

32

A { è un metacarattere di regex utilizzato per le ripetizioni di intervallo come {min,max}. Per una corrispondenza letterale { è necessario sfuggire facendolo precedere da un \\:

str = str.replaceAll("\\{", "\n"); // does work 
+0

Forse cambia anche il commento :) –

+0

@KublaiKhan: :) – codaddict

+0

@codaddict, grazie – Johnydep

5

escape:

str = str.replaceAll("\\{", "\n"); 

Ciò è necessario in quanto il primo argomento di replaceAll() è un regular expression, e { ha un significato speciale in Java espressioni regolari (si tratta di una ripetizione operatore , da cui il messaggio di errore) .

+0

Grazie mille – Johnydep

11

Se davvero intenzione di sostituire i singoli caratteri e non regex (che è quello che ti sembra di voler fare qui), si dovrebbe utilizzare .replace(), non .replaceAll(). Nonostante il nome, .replace() sostituirà TUTTE le occorrenze, non solo la prima.

E nel caso si voglia, String strumenti CharSequence, così .replace("{", "\n") funzionerà.

+0

sì lo so, ma volevo sostituire tutte le occorrenze – Johnydep

+1

Come ho detto, '.replace()' * sostituirà tutte le occorrenze nonostante il suo nome! – fge

Problemi correlati