📜  java中sc.nextLine()和sc.next()有什么区别(1)

📅  最后修改于: 2023-12-03 15:31:49.205000             🧑  作者: Mango

Java中sc.nextLine()和sc.next()有什么区别

在Java编程中,Scanner是一个常用的类,可以读取控制台输入或文件中的数据。其中,Scanner类中有两个方法sc.nextLine()和sc.next()非常相似,但是有一些细微的差别。下面我们将详细介绍这两个方法的区别。

sc.nextLine()方法

sc.nextLine()方法可以读取整行的输入,包括空格。它会读取输入直到找到回车符(\n),并返回该行字符串。例如:

Scanner sc = new Scanner(System.in);
System.out.println("请输入一行文字:");
String text = sc.nextLine();
System.out.println("您输入的是:" + text);

运行效果如下:

请输入一行文字:
hello world
您输入的是:hello world

在上述代码中,当我们输入"hello world"时,sc.nextLine()会读取整行输入并返回字符串"hello world"。

需要注意的是,如果在读取字符串之前有一个sc.nextInt()(或其他读取方法)调用,它会留下一个空白字符或回车符(由于在读取int时会读取到回车符)以防止该字符被后续的nextLine读取。例如:

Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
int num = sc.nextInt();
System.out.println("请输入一行文字:");
String text = sc.nextLine();
System.out.println("您输入的整数是:" + num);
System.out.println("您输入的文字是:" + text);

运行效果如下:

请输入一个整数:
20
请输入一行文字:
您输入的整数是:20
您输入的文字是: (这里是空格)

在上述代码中,我们首先读取了一个整数20,然后调用了sc.nextLine()方法来读取下一行文字。由于在读取整数时,输入缓冲区会有一个回车符,因此调用nextLine()时会读取该回车符,并返回一个空格字符。

sc.next()方法

sc.next()方法可以读取下一个单词或token,也就是以空格分隔的字符串。它会读取输入直到找到空格或回车符(\n),并返回该字符串。例如:

Scanner sc = new Scanner(System.in);
System.out.println("请输入一个单词:");
String word = sc.next();
System.out.println("您输入的是:" + word);

运行效果如下:

请输入一个单词:
hello world
您输入的是:hello

在上述代码中,我们首先输入了"hello world",sc.next()会读取第一个单词"hello"并返回。

需要注意的是,如果输入缓冲区中没有剩余的单词或token(即已经全部读取完毕),则next()方法将会在读取到回车符(\n)时阻塞程序。因此,在使用next()方法时要确保输入缓冲区中有剩余的单词或token。

区别总结
  • sc.nextLine()方法会读取整行文本,包括空格,并返回一个字符串。适用于需要读取整行文本的场合。
  • sc.next()方法会读取下一个单词或token,并返回该字符串。适用于需要按空格分隔的场合。
  • 在使用next()方法时要注意输入缓冲区中是否还有剩余的单词或token,否则会导致程序阻塞。可以使用hasNext()方法预先检查输入缓冲区中是否还有剩余的单词或token。
参考链接