Java含循环与条件的方法中,如何正确返回值并输出指定格式去重结果
Java处理连续重复词的解决方案
核心思路
把问题拆成输入读取、去重处理、结果输出三个独立模块,关键是让去重逻辑只负责生成处理结果和状态标记,输出逻辑单独判断状态后统一打印——彻底避免重复提示的问题。
具体实现代码
import java.util.Scanner; public class DuplicateWordFixer { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入句子:"); String input = scanner.nextLine(); // 调用处理方法,一次性获取去重结果和重复标记 ProcessResult result = fixDuplicateWords(input); // 统一输出逻辑,只执行一次判断 if (result.hasDuplicates) { System.out.println("检测到连续重复错误,修正后的句子:"); System.out.println(result.fixedText); } else { System.out.println("句子无错误"); } scanner.close(); } // 自定义类封装处理结果,避免方法返回多个值的尴尬 private static class ProcessResult { boolean hasDuplicates; String fixedText; ProcessResult(boolean hasDuplicates, String fixedText) { this.hasDuplicates = hasDuplicates; this.fixedText = fixedText; } } private static ProcessResult fixDuplicateWords(String input) { if (input == null || input.trim().isEmpty()) { return new ProcessResult(false, input); } String[] words = input.split("\\s+"); // 按任意空白分割单词 StringBuilder fixedBuilder = new StringBuilder(); boolean hasDuplicates = false; String lastWord = null; for (String current : words) { if (current.isEmpty()) continue; // 和上一个单词对比,不重复才追加 if (!current.equals(lastWord)) { if (lastWord != null) fixedBuilder.append(" "); fixedBuilder.append(current); lastWord = current; } else { hasDuplicates = true; // 仅标记存在重复,不在这里输出 } } return new ProcessResult(hasDuplicates, fixedBuilder.toString()); } }
解决问题的关键技巧
- 职责分离:绝对不要在去重的循环里写输出代码,把数据处理和UI输出彻底分开——这是避免重复打印的核心。
- 结果封装:用自定义类(或Java自带的
AbstractMap.SimpleEntry)把「是否有重复」和「修正后文本」打包返回,解决单方法无法返回多个值的问题。 - 边界处理:提前处理空输入、全空格等极端情况,避免数组越界或空指针异常。
- 避免冗余判断:遍历单词时只做一次重复标记,不需要每次重复都触发提示逻辑。
测试示例
- 输入:
今天 今天 天气 好好 好好
输出:检测到连续重复错误,修正后的句子: 今天 天气 好好 - 输入:
Hello World Java
输出:句子无错误
内容的提问来源于stack exchange,提问作者Newbie
相关产品推荐
相关产品推荐

