2012-02-17 10 views
10

używam wyszukiwania Lucene ale Lucene ma kilka znaków specjalnych, aby uciec jak:Jak mogę uciec grupie znaków specjalnych w java w jednej metodzie?

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

ja mam problem, uciekając te znaki, ponieważ są one zbyt liczne i jeśli mogę użyć metody String.replaceAll(), I skończy się to posiadaniem naprawdę długiej linii kodu tylko po to, by uciec przed postaciami. jaki jest najlepszy sposób? dzięki!

Odpowiedz

18

Istnieje również metoda zwana QueryParser#escape, które mogą być użyteczne:

Zwraca String gdzie te znaki, które QueryParser spodziewa się zbiegłego są uciekł przez poprzedzający \.

+0

tak. działa i po prostu zmniejszyłem i zapisałem linie kodów. Wielkie dzięki! – maccramers

0

Użyj wyrażenia regularnego. String.replaceAll() obsługuje wyrażenie regularne, dzięki czemu można rozwiązać ten problem za pomocą jednego połączenia. Wystarczy być ostrożnym: niektóre z tych znaków są wyjątkowe dla wyrażeń regularnych też, więc mus być uciekł „dwa razy”:

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

(nie próbowałem tego, prawdopodobnie linia ta wymaga pewnych poprawek, ale to jest idea)

2

Użyj wyrażenia regularnego, aby zastąpić te znaki jednym ruchem.

przykład:

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

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