2012-02-17 15 views
10

ho utilizzare la ricerca Lucene ma Lucene ha un mucchio di caratteri speciali per sfuggire come:come posso sfuggire a un gruppo di caratteri speciali in java in un metodo?

- && || ! () { } [ ]^" ~ * ? : \ 

sto avendo problema sfuggire questi personaggi, perché sono troppi e se io uso il metodo String.replaceAll(), i Finiremo per avere una riga di codice davvero lunga solo per sfuggire ai personaggi. qual è il modo migliore di fare? Grazie!

risposta

18

V'è anche un metodo chiamato QueryParser#escape, che può essere utile:

restituisce una stringa in cui quei personaggi che QueryParser aspetta di essere sfuggiti sono fuggiti da un precedente \.

+0

sì. funziona e ho appena ridotto e salvato righe di codici. Molte grazie! – maccramers

0

Utilizzare l'espressione regolare. String.replaceAll() supporta l'espressione regolare, quindi puoi risolvere questo problema utilizzando una sola chiamata. Basta essere attenti: alcuni di questi personaggi sono speciali per le espressioni regolari anche, in modo da mus essere scappati "due volte":

str.replaceAll("([-\\&\\|!\\(\\)\\{\\}\\[\\]\\^\\"~\\*\\?:\\])", "\\$1");

(non ho provato questo, probabilmente, questa linea ha bisogno di alcune correzioni, ma questo è l'idea)

2

Utilizzare l'espressione regolare per sostituire quei caratteri in una volta sola.

esempio:

String s="some text && || []!{}()^*?~ and "; 
     Pattern p= Pattern.compile("([-&\\|!\\(\\){}\\[\\]\\^\"\\~\\*\\?:\\\\])"); 

     s=p.matcher(s).replaceAll("\\\\$1"); 
     System.out.println(s);\\prints some text \&\& \|\| \[\]\!\{\} \(\)\^\*\?\~ and 
Problemi correlati