在学习的过程中,碰到了关于Scanner中一些方法的问题,做了一些总结,分享给大家.
主要的疑问是关于next()和nextLine()这两个方法的问题
Scanner
对于Scanner类来说,首先我们在键盘上输入的数据,会通过Scanner存到缓冲区,然后经过内部的nextXXX方法获取得到数据.
接下来我们来看看next和nextLine的用法解释吧
结论
那我们先得出结论,后面会通过举例子的方式证明这些结论的~
next()
- next()读取数据的时候,将会从缓冲区读取第一个有效字符到第一个分割符为止
- next()的分隔符是空白,例如换行符,空白符,制表符等等这些都是,且不会接受分割符
nextLine()
- nextLine()读取数据的时候接受缓冲区上所有字符,在遇到回车换行符的时候停止,并且回车换行符也会接受到
注意上述的重点:
- next和nextLine的分割符的不同
- nextLine是会接受分割符[它的分割符是回车],但是next不会接受分割符
举例
nextLine
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入字符串(nextLine接收)");
String s = scanner.nextLine();
System.out.println(s);
}
next
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入字符串(next接收)");
String s = scanner.next();
System.out.println(s);
}
nextLine和next混合使用
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入字符串(nextLine接收)");
String s = scanner.nextLine();
System.out.println(s);
System.out.println("输入字符串(next接收)");
String next = scanner.next();
System.out.println(next);
}
当输入没有空格的文字的时候,两者都将输入的内容完整的打印出来了
当输入的文字有空格的时候,理所当然的,只有next会打印不完整,nextLine依旧正常输出
接下来我们看另一份代码
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入字符串(next接收)");
String next = scanner.next();
System.out.println(next);
System.out.println("输入字符串(nextLine接收)");
String s = scanner.nextLine();
System.out.println(s);
}
当我们运行程序之后会发现,在输入"这是一串代码"之后,没有后续的输入操作了程序就结束了,nextLine的输入都没有输,程序就结束了.
原因:
- next读取到回车之后,由于next并不接受分隔符,所以将回车前面的数据读取到了,回车符依旧是留在了缓冲区中的
- 那么当代码进行到第9行的时候,nextLine()在缓冲区读取,发现有数据,这个数据就是我们的回车符,所以直接读取回车符输出,这样就造成了我们都没输入任何内容程序就结束了
当我们输入的内容内含有空格呢?会出现怎样的结果?
如图所示,答案依旧神奇,nextLine处读取到的内容是" 代码"
原因:
- next遇到了字符"这是一串"后面的空格后就结束读取,将" 代码"存入到缓冲区
- 当nextLine读取缓冲区的时候,恰好又将其读取了,所以输出
其实scanner.nextXXX本质是对缓冲区的读取,一定不能认为我们输入什么就会输出什么
最后
现在回到最开始,去看我们的总结是不是十分明了了?🤣