如何用Java Scanner接收8行输入,仅合规时拆分打印单词?
解决输入恰好8行文本后拆分单词输出的问题
核心问题修复点
- 统计输入行数并控制读取数量:原代码会持续读取所有输入行,需改为仅读取8行并存储,后续判断是否满足行数要求。
- 添加行数校验逻辑:仅当实际输入行数恰好为8时,才执行单词拆分输出操作。
- 修复字符串处理细节:原代码用
==做字符串比较是错误的,拆分后的空字符串需正确过滤,同时优化拆分正则避免生成无效空元素。
修改后的完整代码
import java.util.ArrayList; import java.util.List; import java.util.Scanner; class EightLines { public static void main(String[] args) { System.out.println("Enter 8 lines:"); Scanner input = new Scanner(System.in); List<String> lines = new ArrayList<>(); // 读取最多8行输入 for (int i = 0; i < 8 && input.hasNextLine(); i++) { String line = input.nextLine(); lines.add(line); } input.close(); // 仅当正好输入8行时,执行单词拆分输出 if (lines.size() == 8) { for (String line : lines) { printWords(line); } } else { System.out.println("Error: You must enter exactly 8 lines."); } } public static void printWords(String line) { line = line.trim(); // 匹配空白字符+标点,避免拆分出空字符串 String[] wordArray = line.split("[\\s;:,.!?'`]+"); for (String word : wordArray) { if (!word.isEmpty()) { System.out.println(word); } } } }
代码说明
- 行数控制:用
for循环限制读取8行,同时通过input.hasNextLine()处理用户提前终止输入的情况。 - 行数校验:读取完成后检查集合长度是否为8,满足条件才输出单词,否则提示错误。
- 拆分逻辑优化:正则
[\\s;:,.!?']+匹配连续的空白或标点,减少空字符串生成;遍历直接用isEmpty()`过滤剩余空元素。 - 比较逻辑修复:去掉原代码错误的
word == " "判断,改用更准确的空字符串检查。
内容的提问来源于stack exchange,提问作者Lesley
相关产品推荐
相关产品推荐

