首先我们要知道nextLine()的作用:
nextLine()方法可以读取 \n(回车/换行键)之前的字符串,返回的是Enter键之前的所有字符,它可以得到带空格和Tab键的字符串。注意:nextLine()方法的结束符只是\n(回车/换行键)!
在使用nextLine()按行读取字符串时,遇到了问题:直接复制粘贴到命令行的测试用例,需要键入两次回车才能结束循环。
具体原因如下:
代码:
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
while(true){
String nextLine = sc.nextLine();
if (nextLine == null || nextLine.trim().length() == 0) {
break;
}
System.out.println(nextLine);
}
}
测试用例为
yes
i
did
直接将其粘贴到命令行中,需要点击两次回车符才能退出循环
原因在于,字符被解析为:
yes\n
i\n
did
\n 表示回车符,粘贴过来的字符串末尾没有回车符,于是指针停在第三行,等待用户继续输入,第三行输入完毕之后,用户键入回车符,如下
yes\n
i\n
did\n
此时,程序才会读取\n前面的字符串,并将其赋值给nextLine,nextLine此时不为空,不会退出循环。
String nextLine = sc.nextLine(); //截取\n前面的字符串赋值给nextLine
用户如果再次键入回车符,nextLine就会读取回车符前面的字符串,并将其赋值给nextLine,如下:
yes\n
i\n
do\n
\n
此时nextLine为空,循环才会结束
if (nextLine == null || nextLine.trim().length() == 0) {
break;
}