HOWTO · Java
Java Scanner 类中 next() 和 nextLine() 方法的区别
了解何时该用 Scanner.next() 读取一个词元、何时该用 Scanner.nextLine() 读取一行的其余部分,包括将两者结合使用时会发生什么。
本页内容
Scanner.next() 会读取一个词元,而 Scanner.nextLine() 会返回当前行剩余的内容,包括其中的空格。输入由 Scanner 的分隔符隔开(默认是空白字符)时,使用 next();整行内容作为一个值时,使用 nextLine()。
Java Scanner 中的 next() 方法
next() 会根据 Scanner 的分隔符返回下一个词元。使用默认分隔符时,空白字符(包括空格、制表符和换行符)会分隔词元。例如,输入 Welcome To Party 时,第一次调用 next() 会返回 Welcome。
下面这个独立程序使用固定的示例行,并输出第一个词元。代码和示例输出中的文本标签保留为英文:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("Welcome To Party");
System.out.println(scanner.next());
scanner.close();
}
}
Welcome
Java Scanner 中的 nextLine() 方法
nextLine() 会返回当前行剩余的内容,保留文本中的空格,并消耗该行的行分隔符。如果输入是 Welcome To,后接换行符和 Party,一次调用会返回 Welcome To;之后的调用可以读取 Party。示例中的文本标签保留为英文。
下面的程序从固定示例中读取并输出第一整行:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("Welcome To\nParty\n");
System.out.println(scanner.nextLine());
scanner.close();
}
}
Welcome To
Java 中 next() 和 nextLine() 方法的区别
| 行为 | next() |
nextLine() |
|---|---|---|
| 返回内容 | 按当前分隔符定义的下一个词元 | 当前行剩余的内容,包括其中的空格 |
| 停止位置 | 下一个分隔符处;默认情况下,任何空白字符都是分隔符 | 行分隔符处,并消耗该分隔符 |
| 常见用途 | 读取与其他输入分开的值,例如姓名或数字 | 读取完整一行,例如某人的全名或一个句子 |
调用读取词元的方法后,该行剩余的内容(包括行分隔符)尚未被 next() 消耗。因此,接着调用 nextLine() 会返回同一行剩余的内容;如果只剩下行分隔符,返回结果就是空字符串。若要读取下一整行,请先调用一次 nextLine() 消耗当前行的剩余内容,再调用一次以读取下一行。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("42\nAda Lovelace\n");
String number = scanner.next();
String restOfFirstLine = scanner.nextLine();
String fullName = scanner.nextLine();
System.out.println(number);
System.out.println(restOfFirstLine.isEmpty());
System.out.println(fullName);
scanner.close();
}
}
42
true
Ada Lovelace