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

Java入门求助:如何分割输入字符串并统计重复行数(附错误代码)

问题分析与解决方案

你的代码存在几个关键问题,导致无法正确统计重复行:

  • 逻辑偏离需求:每次读取一行后,仅在当前行内容内做拆分循环,完全没有记录之前读过的行,根本无法统计跨多行的重复情况。
  • 字符串比较错误:Java中==是比较对象引用而非内容,判断字符串内容相等必须用equals()方法。
  • 数组越界风险:s.split("\n")的结果最多只有2个元素,但循环条件是i < s.length(),当i超过1时会直接抛出数组越界异常。

正确实现思路

统计重复行的核心是记录每行的出现次数,我们可以用HashMap来实现:

  1. 遍历所有输入行,每读一行就更新Map中对应行的计数
  2. 最后遍历Map,累加所有出现次数≥2的行的计数(匹配你的示例输出逻辑)

修正后的代码

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        Map<String, Integer> lineCountMap = new HashMap<>();
        
        // 读取所有输入行,统计每行出现次数
        while (scan.hasNextLine()) {
            String line = scan.nextLine();
            lineCountMap.put(line, lineCountMap.getOrDefault(line, 0) + 1);
        }
        
        // 计算重复行的总数量(出现次数≥2的行的次数之和)
        int totalDuplicates = 0;
        for (int count : lineCountMap.values()) {
            if (count >= 2) {
                totalDuplicates += count;
            }
        }
        
        System.out.println(totalDuplicates);
        scan.close();
    }
}

代码说明

  • getOrDefault(line, 0):如果Map中没有当前行的记录,默认计数为0,加1后存入Map
  • 遍历Map值时,将所有出现次数≥2的计数累加,结果与你的示例输入输出完全匹配(test出现2次计入总和,TesT出现1次不计入,最终输出2)
  • 若题目要求的是重复的次数(总行数减去唯一行数量),只需把最后计算逻辑改为totalDuplicates = 总行数 - lineCountMap.size(),但当前实现符合你的示例需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 11:55:24