java中怎么用正则表达式删除中括号里面的逗号

 我来答
貌似風輕
2018-07-13 · TA获得超过7280个赞
知道大有可为答主
回答量:1672
采纳率:94%
帮助的人:697万
展开全部

一次替换完好像不行,可以分多次替换

import java.util.regex.Pattern;

public class Test {
    public static void main(String[] args) {
        Pattern compile = Pattern.compile("(\\[.*?)[,,]+(.*?\\])");
        String str = "这是[你,好,啊,测试一下,,]再来一次[你,好测,,试一下]";

        System.out.println("原字符串:" + str);
        while (compile.matcher(str).find()) {
            str = compile.matcher(str).replaceAll("$1$2");
        }

        // 这是[你好啊测试一下]再来一次[你好测试一下]
        System.out.println("替 换 后:" + str);
    }
}
追问
我直接用replaceAll的话直接把中括号一起删掉了有什么办法吗
百度网友895a2b2
2018-07-13 · 超过31用户采纳过TA的回答
知道答主
回答量:55
采纳率:81%
帮助的人:24.5万
展开全部
	/**
 * 删除中括号中的逗号
 * @param str 字符串
 * @param start 开始匹配的位置
 * @return 结果
 */
public static String delDotInBracket(String str, int start) {
String regex = "(\\[|\\]).*?((,|,).*?)*?(\\[|\\])";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
if(!matcher.find(start)) {
return str;
}
String val = matcher.group(0);
int end = matcher.end();
System.out.println(String.format("位置: %d - %d, 匹配到的字符串: %s", matcher.start(), end, val));
if(end < str.length()) {
str = delDotInBracket(str, end - 1);
}
return str.replace(val, val.replaceAll(",|,", ""));
}

public static void main(String[] args) {
String str = "mnk, [0,13[,abc],xyz[a,d]],31";
System.out.println("结果: " + delDotInBracket(str, 0));
}

/*
位置: 5 - 11, 匹配到的字符串: [0,13[
位置: 10 - 16, 匹配到的字符串: [,abc]
位置: 15 - 21, 匹配到的字符串: ],xyz[
位置: 20 - 25, 匹配到的字符串: [a,d]
位置: 24 - 26, 匹配到的字符串: ]]
结果: mnk, [013[abc]xyz[ad]],31
*/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式