前言
在学习 Java 的 Scanner 输入时,很多人都会遇到这样一个问题:
String str = sc.nextLine();
String str = sc.next();
这两个方法看起来都能接收字符串,那它们到底有什么区别?
刚开始学的时候,我也经常分不清,尤其是在输入带空格的内容时,很容易出错。
这篇文章就把这个知识点系统整理一下,帮助自己彻底搞懂。
一、先说结论
next() 和 nextLine() 的核心区别在于:
next():读取一个单词nextLine():读取一整行
也就是说:
next()遇到 空格、Tab、回车 就停止nextLine()遇到 回车 才停止
二、next() 的作用
1. 基本特点
next() 用来读取输入中的一个字符串,但它只会读取到第一个分隔符之前的内容。
常见分隔符有:
- 空格
- Tab
- 回车
也就是说,只要遇到这些,next() 就会停止读取。
2. 示例代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(str);
}
}
如果输入:
hello world
输出结果是:
hello
因为 next() 只会读取 hello,遇到空格就停下来了。
三、nextLine() 的作用
1. 基本特点
nextLine() 用来读取一整行字符串。
它不会因为空格而停止,只有当用户按下回车时,它才会结束读取。
2. 示例代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(str);
}
}
如果输入:
hello world
输出结果是:
hello world
因为 nextLine() 会把整行内容都读取进来,包括中间的空格。
四、两者最直观的区别
下面用表格来总结一下:
| 方法 | 读取范围 | 遇到空格 | 遇到回车 |
|---|---|---|---|
next() |
一个单词 | 停止 | 停止 |
nextLine() |
一整行 | 不停止 | 停止 |
五、举个简单例子
示例 1:使用 next()
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(str);
输入:
I love Java
输出:
I
因为 next() 只读取到第一个空格之前的内容。
示例 2:使用 nextLine()
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(str);
输入:
I love Java
输出:
I love Java
因为 nextLine() 会读取整行。
六、开发中什么时候用哪个?
用 next() 的情况
如果你只想输入一个不带空格的内容,比如:
- 用户名
- 单个单词
- 简单标识符
可以使用:
sc.next();
用 nextLine() 的情况
如果你想输入一整句话,或者内容中可能带空格,比如:
- 姓名
- 地址
- 自我介绍
- 一整行文本
应该使用:
sc.nextLine();
七、最容易踩的坑:nextInt() 后面接 nextLine()
这是初学 Java 时非常常见的一个问题。
示例代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int age = sc.nextInt();
String name = sc.nextLine();
System.out.println(age);
System.out.println(name);
}
}
输入:
18
Tom
你本来以为输出会是:
18
Tom
但实际上很可能变成:
18
也就是 name 读到了空字符串。
八、为什么会出现这个问题?
因为:
nextInt()只读取了数字18- 输入完成后你按下的那个 回车符 ,并没有被
nextInt()读走 - 接下来执行
nextLine()时,它会直接把这个剩下的回车读掉 - 所以得到的就是一个空字符串
九、正确写法
如果前面用了 nextInt()、nextDouble()、next() 这类方法,后面又要用 nextLine(),通常要先额外写一行把回车吃掉。
正确示例
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int age = sc.nextInt();
sc.nextLine(); // 吃掉回车
String name = sc.nextLine();
System.out.println(age);
System.out.println(name);
}
}
输入:
18
Tom
输出:
18
Tom
这样才是我们想要的结果。