2016-11-04 2 views
0

Kann jemand eine Standard-Java-Methode empfehlen, die alle unten aufgelisteten Zeichen löscht, oder schreibe ich am besten meine eigene Methode dazu?Java-Methode, um Zeichen zu entkommen + - & | !() {} []^"~ *?: /=

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

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

Der Grund, warum ich dies brauchen, ist, weil ich mit Lucene Abfragen erstellen und erfüllen müssen, wie hier definiert.

https://lucene.apache.org/core/2_9_4/queryparsersyntax.html

https://svn.apache.org/repos/asf/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java

+0

siehe http://stackoverflow.com/questions/9323848/how-can-i-escape-a-group-of-special-characters-in-java-in-one-method#9323938 – arhak

Antwort

0

Nun, ich habe eine einfache Möglichkeit, bekam ich d Strg + C und Strg + V, da sie schon da waren:

Set<Character> repl = new HashSet<>(Arrays.asList('+', '-', '&', '|', '!', '(', ')', 
       '{', '}', '[', ']', '^', '"', '~', '*', '?', ':', '\\', '/', '=')); 

public String escape(String in) { 
    StringBuilder sb = new StringBuilder(in); 
    for (int i = 0; i < sb.length(); i++) { 
     if (repl.contains(sb.charAt(i))) { 
      sb.insert(i, '\\'); 
      i++; //skip our backslash 
     } 
    } 
    return sb.toString(); 
} 

Keine unordentlichen regex, und nur eine einzige Iteration durch die Eingabezeichenfolge.

Außerhalb davon könnten Sie Matcher#quoteReplacement betrachten, aber ich glaube nicht, dass es alle Zeichen abdeckt, die Sie wollen.

Verwandte Themen