字符串数组去重循环逻辑异常,请求排查问题
字符串数组去重代码的问题分析与修复
代码存在的核心问题
- 空字符串处理逻辑错误:当前把空字符串的判断嵌套在和数组元素相等的条件里,无法直接跳过空字符串,反而会因为内层循环的
break逻辑导致异常流程;正确逻辑应该是先判断当前元素是否为空,为空则直接跳过后续操作。 - 内层循环重复判断逻辑错误:现在只要当前元素和
arr中的某一个元素不相等,就立刻执行arr.add(mas[i]),这会导致同一个不重复元素被多次添加到arr中。比如当arr已有多个元素时,当前元素和第一个元素不相等就添加,和第二个元素不相等又会再次添加,最终arr中出现重复的目标元素。
修复后的代码
// 处理原数组为空的边界情况 if (mas.length == 0) { return; } // 初始化动态数组,仅添加第一个非空元素 if (!mas[0].equals("")) { arr.add(mas[0]); } for (int i = 1; i < mas.length; i++) { // 直接跳过空字符串 if (mas[i].equals("")) { continue; } boolean isDuplicate = false; // 遍历动态数组,确认是否存在重复 for (int j = 0; j < arr.size(); j++) { if (mas[i].equals(arr.get(j))) { isDuplicate = true; break; } } // 确认无重复后再添加 if (!isDuplicate) { arr.add(mas[i]); } } // 输出去重后的结果 for (int j = 0; j < arr.size(); j++) { System.out.print(arr.get(j) + ";"); }
修复说明
- 增加边界处理:判断原数组是否为空,避免索引越界异常。
- 调整空字符串判断时机:在进入重复检查前直接跳过空字符串,不将其加入动态数组。
- 引入重复标记位:通过
isDuplicate变量记录当前元素是否在动态数组中存在,只有遍历完所有动态数组元素确认无重复后,才执行添加操作,彻底避免重复添加问题。
内容的提问来源于stack exchange,提问作者GeorgeAndGuns112
相关产品推荐
相关产品推荐

