You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将字符串中每第3个分号(;)替换为逗号(,)?

解决Java中替换每第3个分号为逗号的问题

首先得点明你代码失效的核心原因:Java里的String是不可变对象,charAt(i)方法只能读取指定位置的字符,没法直接修改字符串里的内容——这就是你尝试修改时碰壁的关键。下面给你两种实用的解决方案:

方法1:用StringBuilder(直观易上手)

StringBuilder是可变的字符序列,专门用来处理需要修改字符的场景。我们可以遍历原字符串的每个字符,统计分号出现的次数,每碰到第3个分号就替换成逗号,其余字符直接保留:

String s = "RED;34;34;BLUE;44;44;GREEN;8;8;BLUE;53;53";
StringBuilder sb = new StringBuilder();
int counter = 0;

for (int i = 0; i < s.length(); i++) {
    char c = s.charAt(i);
    if (c == ';') {
        counter++;
        if (counter == 3) {
            sb.append(',');
            counter = 0; // 重置计数器,开始统计下一组
            continue;
        }
    }
    sb.append(c);
}

String result = sb.toString();
System.out.println(result); // 输出:RED;34;34,BLUE;44;44,GREEN;8;8,BLUE;53;53

方法2:用正则表达式(简洁高效)

如果想让代码更紧凑,可以用正则表达式匹配每一组包含3个分号的片段,把第3个分号替换成逗号:

String s = "RED;34;34;BLUE;44;44;GREEN;8;8;BLUE;53;53";
// 正则逻辑:匹配前两组"内容+分号",加上第3组内容,最后匹配要替换的第3个分号
String result = s.replaceAll("((?:[^;]*;){2}[^;]*);", "$1,");
System.out.println(result); // 输出期望结果

简单解释下正则:

  • (?:[^;]*;):非捕获组,匹配任意非分号字符+一个分号
  • {2}:重复这个非捕获组2次,对应前两组"内容+分号"
  • [^;]*:匹配第3组的内容(到下一个分号前的部分)
  • 最后匹配的;就是我们要替换的第3个分号,替换时保留捕获到的前半部分,换成逗号即可。

内容的提问来源于stack exchange,提问作者Tolga Yasar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:38:24