输入字符串
_ _ _ _one _ two\n // "_"表示空格,"\n"表示回车
未设置useDelimiter()的情况
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
输出字符串str得到"one",str.length()等于3,可知最后的"\n"并未扫描进来
设置useDelimiter("\n");的情况
Scanner scanner = new Scanner(System.in);
scanner.useDelimiter("\n");
String str = scanner.next();
输出字符串str得到"_ _one _ two",长度为12,可知最后的"\n"被扫描进来了
这是为什么呢?
Windows下,我们在键盘上按下
Enter
键,实际上输入的是回车和换行两个字符:\r\n
,ASCII码分别是13和10
默认情况下,
Scanner
获取到的输入里面是不包含回车换行的。比如你输入____one_two\r\n
,它只会从____one_two
里面获取输出(当然,可能要通过多次next()
来获取),自动把回车换行过滤掉了但是当我们强制以回车或换行为分隔符时,它就不会自动过滤回车换行符了。比如你以回车符
\n
为分隔符的话,输入上面的内容会得到____one_two\r
,这也就是返回的length
为12的原因。可以用下面的程序来验证,可以发现获取到的字符串的最后一个字符ASCII码为13,表示它是一个回车符\r
:解决方法:用
\r\n
作为分隔符就正常了