提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助
目录
前言
1. next():读取单词
功能与特点
示例代码
2. nextInt():读取整数
功能与特点
示例代码
常见陷阱
3. nextLine():读取整行
功能与特点
示例代码
常见陷阱
4. 混合使用的正确姿势
场景:先读整数,再读字符串
❌ 错误写法
✅ 正确写法
5. 对比总结
前言
在Java中,Scanner类是处理用户输入的重要工具,但其方如 next(), nextInt() 和 nextLine() 的细微差异常让开发者踩坑。本文将通过代码示例和场景分析,详细解释它们的区别,并总结常见问题的解决方案。
1. next():读取单词
功能与特点
读取规则:以空格( )、制表符(\t)或换行符(\n)作为分隔符,返回输入流中的下一个单词。
忽略空白字符:开头如果有分隔符,会自动跳过。
不读取分隔符:读取后,输入流中残留的分隔符(如换行符)可能影响后续操作。
示例代码
Scanner scanner = new Scanner(System.in);
System.out.print("输入姓名和年龄(例如:John 25): ");
String name = scanner.next(); // 读取第一个单词(如"John")
int age = scanner.nextInt(); // 读取下一个整数(如25)
System.out.println("姓名: " + name + ", 年龄: " + age);
2. nextInt():读取整数
功能与特点
读取规则:读取输入流中的下一个整数,忽略前导空格。
数据类型严格:若输入非整数(如字母),抛出 InputMismatchException。
残留换行符:读取后,输入流中可能残留换行符(\n),直接影响后续的 nextLine()。
示例代码
Scanner scanner = new Scanner(System.in);
System.out.print("输入年龄: ");
int age = scanner.nextInt(); // 读取整数(如25)
scanner.nextLine(); // 清除残留的换行符
System.out.print("输入地址: ");
String address = scanner.nextLine(); // 正常读取整行(如"New York")
常见陷阱
换行符残留问题: 若直接调用 nextLine() 在 nextInt() 后,会立即读取残留的 \n,导致 address 为空字符串。
3. nextLine():读取整行
功能与特点
读取规则:读取直到换行符(\n)的所有字符,包含空格,并消耗换行符。
适合长文本:用于读取包含空格的完整句子或段落。
清理缓冲区:常用于清除 next() 或 nextInt() 后的残留字符。
示例代码
Scanner scanner = new Scanner(System.in);
System.out.print("输入一句话: ");
String sentence = scanner.nextLine(); // 读取整行(如"I love Java")
System.out.println("内容: " + sentence);
常见陷阱
混合使用问题: 若在 nextInt() 后未调用 nextLine() 清理缓冲区,后续的 nextLine() 会失效。
4. 混合使用的正确姿势
场景:先读整数,再读字符串
❌ 错误写法
Scanner scanner = new Scanner(System.in);
System.out.print("输入年龄: ");
int age = scanner.nextInt();
System.out.print("输入姓名: ");
String name = scanner.nextLine(); // 读取到空字符串!
✅ 正确写法
Scanner scanner = new Scanner(System.in);
System.out.print("输入年龄: ");
int age = scanner.nextInt();
scanner.nextLine(); // 清除残留的换行符
System.out.print("输入姓名: ");
String name = scanner.nextLine(); // 正常读取
5. 对比总结
方法读取内容分隔符处理缓冲区残留问题适用场景next()单个单词跳过前导空格,保留分隔符可能残留换行符读取无空格的单词nextInt()整数跳过前导空格,保留分隔符残留换行符读取整数输入nextLine()整行(含空格)读取并消耗换行符无残留读取完整句子或多词输入