Java中如何删除字符串里出现多次的字符?现有代码运行结果不符求排查
问题分析
- 索引错位:调用
deleteCharAt(i)后,StringBuilder内的字符会整体向前偏移1位,后续执行deleteCharAt(j)时定位已经偏移,无法删除预期的目标字符。 - 字符漏检:删除i位置的字符后,外层循环的i会直接自增,会跳过刚移动到i位置的新字符,导致部分重复字符未被检测。
- 统计逻辑缺陷:当前逻辑仅能处理刚好出现2次的字符,如果某字符出现3次及以上,删除前2次后剩余的字符会被误保留,不符合「出现次数超过一次就全部删除」的要求。
修复方案
采用先统计字符出现频率、再过滤保留目标字符的思路实现,逻辑简单且不会出现索引异常问题:
public class Main { public static void main(String[] args) { String s = "Javaprogram"; // 统计每个字符的出现次数 int[] charCount = new int[256]; for (char c : s.toCharArray()) { charCount[c]++; } // 仅保留出现次数为1的字符 StringBuilder result = new StringBuilder(); for (char c : s.toCharArray()) { if (charCount[c] == 1) { result.append(c); } } System.out.println(result.toString()); } }
运行上述代码即可得到预期输出Jvpogm。
内容的提问来源于stack exchange,提问作者Oswald
相关产品推荐
相关产品推荐

