Java中如何删除字符串中每第N个字符(如每第12个字符)
你写的正则.(.)和替换逻辑$12不符合需求,原因有两个:
- 正则
.(.)仅匹配连续2个字符,只能实现每2个字符删除1个的逻辑,和你要的间隔12删字符的需求不匹配 - 替换值
$12会被Java正则引擎识别为第12个捕获分组的内容,你的正则只有1个捕获组,无法取到对应值,自然输出错误。
方案1:正则实现(适合短字符串,代码简洁)
你需要构造动态正则匹配对应位置的待删除字符,逻辑如下:
String str = "~asdfl;kjx,~rgadfaeg,dsafnewgfljka;ldfjsfa;dlkjfa;lvjvbnaber;fwelfjadfafa"; int character = 12; // 构造正则:每character个索引为一组,保留前character个(索引0到character-1),删除紧随的第character个索引对应的字符 String regex = "(.{" + character + "}).?"; String result = str.replaceAll(regex, "$1"); System.out.println(result);
注:如果你实际要删除的是常规理解的「每第character个字符」(即索引11、23等(i+1) % character == 0的位置),只需要把正则里的character改成character-1即可。
方案2:StringBuilder实现(性能更优,适合长字符串,逻辑更可控)
直接遍历字符串跳过要删除的索引即可:
String str = "~asdfl;kjx,~rgadfaeg,dsafnewgfljka;ldfjsfa;dlkjfa;lvjvbnaber;fwelfjadfafa"; int character = 12; StringBuilder sb = new StringBuilder(); for (int i = 0; i < str.length(); i++) { // 按你要求跳过索引为12、24等character整数倍的字符 if (i % character != 0 || i == 0) { sb.append(str.charAt(i)); } } String result = sb.toString(); System.out.println(result);
如果要适配常规的“每第character个字符删除”需求,把判断条件改成(i + 1) % character != 0即可。
内容的提问来源于stack exchange,提问作者Jsid Xbend
相关产品推荐
相关产品推荐

