Java读取段落至EOF统计单词数代码输出不符合预期问题
Java单词统计代码问题修复
原有代码错误点
- 重复读取行:while循环条件中已经调用
br.readLine()读取了一行存入str,循环体中又调用一次该方法,会导致一半的行被丢弃,且当输入总行数为奇数时会出现空指针异常 - 索引越界风险:for循环遍历到
str.length()-1就需要停止,原代码写的是i < str.length(),当i指向最后一个字符时访问str.charAt(i+1)会触发数组越界 - 计数逻辑错误:
- 初始值
wordCount = 1不合理,空输入会错误返回1 - 未处理行首空格、连续多空格、行尾空格的边界情况,会导致计数不准
- 没有给每行的第一个单词做计数适配
- 初始值
- 输出位置错误:打印语句放在while循环内部,每处理一行就输出一次中间值,而非全部输入处理完成后输出最终结果
修复后代码
import java.io.*; public class CountWords { public static void main (String[] args) throws IOException { InputStreamReader r = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(r); int wordCount = 0; String str; while ((str = br.readLine()) != null) { // 按空白字符分割,过滤连续空格、行首尾空格产生的空结果 String[] words = str.trim().split("\\s+"); // 排除空行的计数 if (!str.trim().isEmpty()) { wordCount += words.length; } } System.out.println(wordCount); } }
针对给出的样例输入,运行上述代码可得到预期输出36。
内容的提问来源于stack exchange,提问作者Mahesh Divate
相关产品推荐
相关产品推荐

