Java Scanner的next()与nextLine()正则匹配差异问题咨询
为什么Scanner的nextLine()和next()匹配正则结果不同?
嘿,这个问题的关键在于搞清楚Scanner类里nextLine()和next()这两个方法的核心行为差异,我给你拆解明白:
1. nextLine()的行为
nextLine()的作用是读取一整行输入,它会把从当前位置开始,直到遇到换行符(\n)为止的所有字符都读进来,并且会把换行符从输入缓冲区中移除,但返回的字符串里不包含这个换行符。
回到你的例子:当你输入"a "(字符a加一个空格)然后回车,nextLine()拿到的完整内容就是"a ",和你写的正则"a\\s"(匹配a后跟一个空白字符)完全吻合,所以返回true。
2. next()的行为
next()的规则就不一样了——它是以空白字符(空格、制表符、换行符等)作为分隔符来读取输入的:
- 首先,它会跳过输入开头所有的空白字符(如果有的话);
- 然后,它会读取字符,直到遇到下一个空白字符就停止;
- 返回的结果里不包含这个终止的空白字符。
还是你的例子:输入"a "然后回车,next()会读取到字符a之后,遇到后面的空格(空白字符)就停止了,所以它返回的字符串是"a",而你的正则"a\\s"要求a后面必须跟一个空白字符,显然"a"不满足,所以返回false。
额外小提示
如果你的代码里先调用了next()再调用nextLine(),要注意next()不会处理掉换行符,这时候nextLine()可能会直接读取到空字符串,这也是很多人踩过的坑哦~
内容的提问来源于stack exchange,提问作者Aren Tahmasian
相关产品推荐
相关产品推荐

