java转义括号_java转义括号
我有這個(gè)小類來對(duì)字符串進(jìn)行多重替換:
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang.StringUtils;
public class MultipleReplace {
public static void main(String[] args) {
Map tokens = new HashMap();
tokens.put(":asd:", "");
tokens.put(":)", "");
String template = ":asd: bravo! :)";
String patternString = "(" + StringUtils.join(tokens.keySet(), "|") + ")";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(template);
StringBuffer sb = new StringBuffer();
while(matcher.find()) {
matcher.appendReplacement(sb, tokens.get(matcher.group(1)));
}
matcher.appendTail(sb);
System.out.println(sb.toString());
}
}問題在于第二次替換,我有一個(gè)括號(hào)導(dǎo)致:
線程“main”中的異常java.util.regex.PatternSyntaxException:在索引8附近關(guān)閉''''不匹配
(:)|:ASD :)
我怎樣才能擺脫括號(hào)?
或者,你可以建議一個(gè)替代方案來做這個(gè)多重替換嗎?
非常感謝,對(duì)我的英文感到抱歉:)
編輯:
用反斜杠轉(zhuǎn)義')'不起作用,它不會(huì)編譯:
“無(wú)效的轉(zhuǎn)義序列(有效的轉(zhuǎn)義序列是\ b \ t \ n \ f \ r \”\'\)“
新編輯
使用兩個(gè)反斜杠編譯,但不做替換。
最后編輯
最后找到了解決方案,在構(gòu)建模式時(shí)使用Pattern.quote。必須使用迭代器來完成循環(huán)。
這里是正確的代碼:
package string;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MultipleReplace {
@SuppressWarnings("rawtypes")
public static void main(String[] args) {
Map tokens = new HashMap();
tokens.put(":asd:", "");
tokens.put(":)", "");
String template = ":asd: bravo! :)";
Iterator it = tokens.entrySet().iterator();
String patternString = "(";
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry)it.next();
System.out.println(pairs.getKey() + " = " + pairs.getValue());
patternString = patternString +Pattern.quote((String) pairs.getKey());
if (it.hasNext())
{
patternString = patternString + "|";
}
}
patternString = patternString + ")";
System.out.println(patternString);
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(template);
StringBuffer sb = new StringBuffer();
while(matcher.find()) {
matcher.appendReplacement(sb, tokens.get(matcher.group(1)));
}
matcher.appendTail(sb);
System.out.println(sb.toString());
}
}如果我能改進(jìn)工作,請(qǐng)?jiān)u論它!非常感謝你!
總結(jié)
以上是生活随笔為你收集整理的java转义括号_java转义括号的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿帕奇退出java_java+tomca
- 下一篇: 【金万维】天联高级版客户端登陆后,打开U