
本文介绍如何使用 scanner 读取用户在单行中输入的多个整数(以逗号分隔),并高效存入 arraylist,避免 inputmismatchexception,同时完成排序与极值提取。
本文介绍如何使用 scanner 读取用户在单行中输入的多个整数(以逗号分隔),并高效存入 arraylist,避免 inputmismatchexception,同时完成排序与极值提取。
在 Java 编程中,初学者常误用 Scanner.nextInt() 逐个读取数字,导致无法处理“一行多值”的常见输入场景(如 12,2,1,5,10)。该方式不仅交互繁琐,还易因格式不匹配抛出 InputMismatchException。正确做法是先读取整行字符串,再按分隔符解析。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
✅ 推荐实现:一行输入 → 分割 → 转整型 → 存入 ArrayList
import java.util.*;
public class SingleLineInputExample {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
List<integer> numbers = new ArrayList();
System.out.print("请输入整数(用逗号分隔,例如:3,15,7,22):");
String line = input.nextLine().trim(); // 读取整行并去除首尾空格
if (!line.isEmpty()) {
String[] parts = line.split(",\s*"); // 支持逗号后带任意空格(如 "1, 2, 3")
for (String part : parts) {
try {
int num = Integer.parseInt(part.trim());
numbers.add(num);
} catch (NumberFormatException e) {
System.err.println("警告:跳过无效输入 '" + part + "'(非整数)");
}
}
}
if (numbers.isEmpty()) {
System.out.println("未输入有效数字。");
return;
}
System.out.println("原始输入:" + numbers);
Collections.sort(numbers);
System.out.println("升序排列:" + numbers);
System.out.println("最小值:" + Collections.min(numbers));
System.out.println("最大值:" + Collections.max(numbers));
}
}</integer>
? 关键要点说明
- input.nextLine() 替代 nextInt():避免因换行符残留导致后续读取异常,确保完整捕获用户输入。
- *正则分隔符 `",s"**:s*表示零个或多个空白字符(空格、制表符等),可兼容"1,2,3"、"4, 5, 6"` 等多种格式。
- trim() 防御性处理:消除每个数字前后的空格,防止 parseInt 因 " 7 " 报错。
- 异常捕获机制:对非法输入(如 "abc" 或空字符串)友好提示,不中断程序执行。
-
使用 List
接口 :比 ArrayList更符合面向接口编程规范,提升代码可维护性。
⚠️ 注意事项
- 不要混用 nextInt() 和 nextLine():nextInt() 不消耗换行符,紧随其后的 nextLine() 会立即返回空字符串——这是初学者最常见陷阱。
- 若需支持空格分隔(如 1 2 3 4),可改用 line.split("\s+");若需支持逗号/空格混合分隔,推荐使用 line.replaceAll("\s*,\s*", ",").split(",") 预处理。
- 对于大规模数据或生产环境,建议封装为工具方法,并增加输入校验(如范围限制、去重逻辑等)。
掌握这种“字符串→分割→转换→集合”的模式,是处理标准输入的基础能力,也适用于 CSV 解析、配置解析等实际场景。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










