[转] Java:对Scanner的useDelimiter()方法的疑问

Posted 天空之城

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[转] Java:对Scanner的useDelimiter()方法的疑问相关的知识,希望对你有一定的参考价值。

【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()方法的疑问的主要内容,如果未能解决你的问题,请参考以下文章

Java学习笔记-----Scanner用法(转)

复利计算C语言转java的相关代码

java 中怎么把一个数组的字符串转换成一个数组

在java中如何输入一个char型字符。

java - 如何仅使用Java中的util.Scanner包按字母顺序对单个字符串进行排序?

java程序练习:x进制转Y进制