测试完整字符串:哈哈 呵呵 笑嘻嘻
scanner.next():读取输入内容中第一个没有空白符的内容。在它之后的读取操作(next或nextLine)会继续读,直到流中的内容被读完。比如第一次读的是"哈哈",第二次读的是"呵呵"。scanner.nextLine():读取输入内容中整行内容。
示例1:nextLine+nextLine
Scanner input = new Scanner(System.in);
System.out.println("请输入字符串(nextLine):");
String str = input.nextLine();
System.out.println(str);
System.out.println("请输入字符串(nextLine):");
String str1 = input.nextLine();
System.out.println(str1);
结果:
示例2: nextLine+next
Scanner input = new Scanner(System.in);
System.out.println("请输入字符串(nextLine):");
String str = input.nextLine();
System.out.println(str);
System.out.println("请输入字符串(next):");
String str1 = input.next();
System.out.println(str1);
结果:
示例3:next+next
Scanner input = new Scanner(System.in);
System.out.println("请输入字符串(next):");
String str = input.next();
System.out.println(str);
System.out.println("请输入字符串(next):");
String str1 = input.next();
System.out.println(str1);
结果:
示例4:next+nextLine
Scanner input = new Scanner(System.in);
System.out.println("请输入字符串(next):");
String str = input.next();
System.out.println(str);
System.out.println("请输入字符串(nextLine):");
String str1 = input.nextLine();
System.out.println(str1);
结果:
其实,就是输入的完整字符串->缓冲到流中->读取->流中还有剩余字符串,继续读取...
所以,nextLine不会影响后面的next或nextLine,但是next会影响后面的next和nextLine。
(因为next读的是流中第一个没有空白符的内容,一次可能没读完;nextLine读的是流中整行的内容,一次读完)
扫描器跳过录入的问题
要弄清楚这个问题,首先要知道,对于用户录入的内容,会带上换行符写到一个缓冲流中,next方法在读取的时候会忽略换行符,nextLine方法在读取的时候会带上换行符,所以next+next/nextLine+nextLine/nextLine+next不存在跳过录入的问题,即一个录入结束另一个录入会等待用户的操作。还有一点,就是next和nextLine都会以回车符作为结束符。
正常情况:光标定位处录入完毕手动回车结束。
发生场景:next+nextLine
原因:缓冲区还有换行符,第一次录入结束后,第二次准备录入的时候,读出了缓冲区的换行符,直接换了一行,即光标从等待录入的一行跳到下一行去了,然后也就结束了,都还没有录入内容(可以理解为默认输了一个换行符然后回车结束了)。