Java中next和nextline的问题

在Java中,next()和nextLine()是用于从输入流中读取数据的方法,在处理用户输入时常见使用。

next():

  • next()方法用于获取输入流中的下一个字符串(以 空白字符 作为分隔符),并返回该字符串。
  • 它只会返回输入中的下一个字符串,忽略字符串之后的空白字符 (这也是导致问题的原因)
  • next()方法返回的结果不包含空白字符。

例如:

Scanner scanner = new Scanner(System.in);
System.out.print("请输入两个字符串:");

String str1 = scanner.next();
String str2 = scanner.next();

System.out.println("第一个字符串:" + str1);
System.out.println("第二个字符串:" + str2);

输入:

Hello World

输出:

第一个字符串:Hello
第二个字符串:World
//还残留一个 空白字符(World之后的) 在缓冲区

nextLine():

  • nextLine()方法用于获取输入流中的下一行字符串,并返回该字符串。
  • 它获取的是输入流中的一整行,包括 空白字符 在内的所有字符。
  • nextLine()方法返回的结果包含整行的内容,直到遇到回车符(Enter键)为止 (回车也会被读取掉)。

例如:

Scanner scanner = new Scanner(System.in);
System.out.print("请输入一行字符串:");

String line = scanner.nextLine();

System.out.println("输入的字符串为:" + line);

输入:

Hello World

输出:

输入的字符串为:Hello World
//回车也被读取掉了

问题 : 如果在代码中混用next()和nextLine()可能会产生问题,原因是它们的输入缓冲区操作不同

举个例子:

Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数:");
int num = scanner.nextInt();// 和next一样
System.out.print("请输入一行字符串:");
String line = scanner.nextLine();

System.out.println("输入的整数为:" + num);
System.out.println("输入的字符串为:" + line);

输入:

10

输出:

输入的整数为:10
输入的字符串为:

上述代码中,nextLine()方法没有等待用户输入字符串,直接返回了一个空字符串。这是因为在执行完nextInt()后,输入流中的换行符('\n')仍然留在输入缓冲区中(忽略 == 跳过,所以导致最后一个空白字符会残留在缓冲区中),然后nextLine()方法会读取缓冲区中的这个换行符作为输入。

解决该问题的一个方法是在nextInt()后使用一个额外的nextLine(),将输入缓冲区中的换行符读取掉。

修改后的代码如下:

Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数:");
int num = scanner.nextInt();
scanner.nextLine(); // 读取输入缓冲区中的换行符
System.out.print("请输入一行字符串:");
String line = scanner.nextLine();

System.out.println("输入的整数为:" + num);
System.out.println("输入的字符串为:" + line);

输入:

10
// \n 被额外的nextLine()读取掉了
123

输出:

输入的整数为:10
输入的字符串为:123
posted on 2023-08-09 10:49  沐阳Yo  阅读(520)  评论(0)    收藏  举报