You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)把「是否有重复」和「修正后文本」打包返回,解决单方法无法返回多个值的问题。
  • 边界处理:提前处理空输入、全空格等极端情况,避免数组越界或空指针异常。
  • 避免冗余判断:遍历单词时只做一次重复标记,不需要每次重复都触发提示逻辑。

测试示例

  1. 输入:今天 今天 天气 好好 好好
    输出:
    检测到连续重复错误,修正后的句子:
    今天 天气 好好
    
  2. 输入:Hello World Java
    输出:
    句子无错误
    

内容的提问来源于stack exchange,提问作者Newbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 12:00:24