1. 程式人生 > >[轉] Java:對Scanner的useDelimiter()方法的疑問

[轉] Java:對Scanner的useDelimiter()方法的疑問

asc color 以及 mit 得到 gpo next ascii碼 from

【From】https://segmentfault.com/q/1010000003885362

  1. Windows下,我們在鍵盤上按下Enter鍵,實際上輸入的是回車和換行兩個字符:\r\n,ASCII碼分別是13和10

  2. 默認情況下,Scanner獲取到的輸入裏面是不包含回車換行的。比如你輸入____one_two\r\n,它只會從____one_two裏面獲取輸出(當然,可能要通過多次next()來獲取),自動把回車換行過濾掉了

  3. 但是當我們強制以回車或換行為分隔符時,它就不會自動過濾回車換行符了。比如你以回車符\n為分隔符的話,輸入上面的內容會得到____one_two\r,這也就是返回的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) + ")");

解決方法:用\r\n作為分隔符就正常了

[轉] Java:對Scanner的useDelimiter()方法的疑問