Java中.next()和.nextLine()
Posted Freedom
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中.next()和.nextLine()相关的知识,希望对你有一定的参考价值。
问题引入
刚学Java时经常使用到Scanner类,接受键盘输入的字符串方法有两种: .next()和.nextLine(),讨论他们的区别。
使用 .next() 和 .nextLine()先后接受两次键盘输入,然后打印输入的内容
import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("第一次输入"); String s1 = input.next(); System.out.println("第二次输入"); String s2 = input.nextLine(); System.out.println("第一次输入内容:" + s1 + "\\t第二次输入内容:" + s2); } }
运行,输入 1 ,然后回车,发现还没进行第二次输入,系统就开始打印输入内容了
如果调换一下顺序,先使用 .nextLine(),在使用 .next(),可以正常录入两次键盘输入
next() 和 nextLine()的区别
接收内容
next() |
1. 不接收空格,只接收有效字符,不能得到一个带空格的字符串 2. next在没有读到有效字符前会把空格、Tab、Enter自动去掉 |
nextLine() |
1. 可以接受空格,能得到带空格的字符串 2. 返回的是Enter之前的一切字符 |
停止接受
next() |
next()在读到有效字符后才会将空格、Tab、Enter视为结束符 |
nextLine() |
nextLine()将Enter视为结束 |
注意:next()在遇到Enter结束时,并不会吸收Enter; 而nextLine()会吸收Enter。
何谓吸收?
next()遇到Enter结束,此时键盘录入Enter 的信息仍然停留在内存中, 下次需要输入时,直接读取了该信息。因此本文开头的代码运行时,首先输入1然后回车之后,next()结束,键盘录入Enter的信息没有被吸收,然后被nextLine()吸收并作为结束符。才导致了最后的运行结果。
补充说明
经过验证,除了nextLine()其他的next的方法,如nextDouble() ,nextFloat() ,nextInt() 等,都无法吸收Enter。
如何解决?
可以多使用一次nextLine(),用停留在内存中的Enter吸收掉。
以上是关于Java中.next()和.nextLine()的主要内容,如果未能解决你的问题,请参考以下文章