输入字符串
_ _ _ _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
鍵,實際上輸入的是回車和換行兩個字元:rn
,ASCII碼分別是13和10
預設情況下,
Scanner
取得到的輸入裡面是不包含回車換行的。例如你輸入____one_tworn
,它只會從____one_two
裡面獲取輸出(當然,可能要透過多次next()
來取得),自動把回車換行過濾掉了但是當我們強制以回車或換行為分隔符號時,它就不會自動過濾回車換行符了。例如你以回車符
n
為分隔符號的話,輸入上面的內容會得到____one_twor
,這也就是回傳的length
為12的原因。可以用下面的程式來驗證,可以發現取得到的字串的最後一個字元ASCII碼為13,表示它是一個回車符r
:解決方法:用
rn
當分隔符號就正常了Windows下回車是 rn