2016-11-04 4 views
0

以下の文字をすべてエスケープする標準のJavaメソッドをお勧めする人はいらっしゃるでしょうか、それとも私自身の方法を使ってこれを行うのがいいですか?文字をエスケープするJavaメソッド+ - &| ! (){}^"〜*?:/=

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

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

私は私がここで定義されるように作成し、Luceneのクエリを遵守する必要があるため、これは必要な理由:

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

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

答えて

0

にまあ、私は1つの簡単な方法を持っている私が使用しています。彼らは既にあったので、DのCTRL + CとCtrl + V:

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(); 
} 

いいえ乱雑正規表現、および入力文字列を介して単一の反復。

外では、Matcher#quoteReplacementと考えることができますが、私はそれがあなたが望むすべての文字をカバーしているとは思わない。

関連する問題