Java:对Scanner的useDelimiter()方法的疑问
迷茫
迷茫 2017-04-17 15:19:12
0
2
406

输入字符串

_ _ _ _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"被扫描进来了

这是为什么呢?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回覆(2)
PHPzhong
  1. Windows下,我們在鍵盤上按下Enter鍵,實際上輸入的是回車和換行兩個字元:rn,ASCII碼分別是13和10

  2. 預設情況下,Scanner取得到的輸入裡面是不包含回車換行的。例如你輸入____one_tworn,它只會從____one_two裡面獲取輸出(當然,可能要透過多次next()來取得),自動把回車換行過濾掉了

  3. 但是當我們強制以回車或換行為分隔符號時,它就不會自動過濾回車換行符了。例如你以回車符n為分隔符號的話,輸入上面的內容會得到____one_twor,這也就是回傳的length為12的原因。可以用下面的程式來驗證,可以發現取得到的字串的最後一個字元ASCII碼為13,表示它是一個回車符r

// 输入`____one_two\r\n`来测试
Scanner scanner = new Scanner(System.in);
scanner.useDelimiter("\n");
String str = scanner.next();
// 打印获取到的内容和其长度,以及最后一个字符的ASCII码
System.out.println(str + ":" + str.length()
        + " (" + str.codePointAt(str.length()-1) + ")");

解決方法:用rn當分隔符號就正常了

伊谢尔伦

Windows下回車是 rn

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!