任何人都可以推荐一种标准的Java方法来逃避下面列出的所有字符,或者我最好自己编写这样的方法吗?
From: + - & | ! ( ) { } [ ] ^ " ~ * ? : \ / =
To: \+ \- \& \| \! \( \) \{ \} \[ \] \^ \" \~ \* \? \: \\ \/ \=
我需要这个的原因是因为我需要创建并遵守此处定义的Lucene查询:
答案 0 :(得分:0)
嗯,我有一个简单的方法。我使用了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
,但我不相信它涵盖了你想要的所有角色。