日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java转义括号_java转义括号

發(fā)布時(shí)間:2023/12/9 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java转义括号_java转义括号 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我有這個(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。