如何将字符串中每第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
相关产品推荐
相关产品推荐

