java usedelimiter_【java】Java:对Scanner的useDelimiter()方法的疑问

输入字符串

_ _ _ _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:

// 输入`____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作为分隔符就正常了

Windows下回车是 \r\n

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值