Java入门求助:如何分割输入字符串并统计重复行数(附错误代码)
问题分析与解决方案
你的代码存在几个关键问题,导致无法正确统计重复行:
- 逻辑偏离需求:每次读取一行后,仅在当前行内容内做拆分循环,完全没有记录之前读过的行,根本无法统计跨多行的重复情况。
- 字符串比较错误:Java中
==是比较对象引用而非内容,判断字符串内容相等必须用equals()方法。 - 数组越界风险:
s.split("\n")的结果最多只有2个元素,但循环条件是i < s.length(),当i超过1时会直接抛出数组越界异常。
正确实现思路
统计重复行的核心是记录每行的出现次数,我们可以用HashMap来实现:
- 遍历所有输入行,每读一行就更新Map中对应行的计数
- 最后遍历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
相关产品推荐
相关产品推荐

