JAVAutil。扫描仪解释这行代码是用JAVA编写的
在HACKERRANK中,这行代码经常出现。我认为这是跳过空白,但那是什么意思
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
你可以在下面搜索框中键入要查询的问题!
在HACKERRANK中,这行代码经常出现。我认为这是跳过空白,但那是什么意思
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
# 1 楼答案
这里已经有一个类似的问题了。它不会跳过空格,因为它的unicode字符不存在(u0020)
\r=CR(回车)//在X之前的Mac OS中用作新行字符
\n=LF(换行)//在Unix/Mac OS X中用作新行字符
\r\n=CR+LF//在Windows中用作新行字符
u2028=line separator
u2029=paragraph separator
u0085=next line
# 2 楼答案
Skip
\r\n
适用于Windows其余的是标准的
\r=CR
,\n=LF
(参见\r\n , \r , \n what is the difference between them?)然后是一些Unicode特殊字符:
u2028 = LINE SEPARATOR
(https://www.fileformat.info/info/unicode/char/2028/index.htm)u2029 = PARAGRAPH SEPARATOR
(http://www.fileformat.info/info/unicode/char/2029/index.htm)u0085 = NEXT LINE
(https://www.fileformat.info/info/unicode/char/0085/index.htm)# 3 楼答案
这背后的全部逻辑是,当输入来自扫描仪时,删除额外的空间和额外的新行
# 4 楼答案
OpenJDK的源代码显示,nextLine()将此正则表达式用于行分隔符:
\r\n
是一个窗口行结束李>\n
是一个UNIX行结尾李>\r
是一个麦金托什(OSX之前)行的结尾李>\u2028
是LINE SEPARATOR李>\u2029
是PARAGRAPH SEPARATOR李>\u0085
是NEXT LINE (NEL)李># 5 楼答案
整个过程是一个正则表达式,因此您可以简单地将其放入https://regexr.com或https://regex101.com/中,它将为您提供正则表达式每个部分的含义的完整描述
这是给你的:
至于
scanner.skip
这确实(Scanner Pattern Tutorial):我还建议阅读
Alan Moore's
这里的答案RegEx in Java: how to deal with newline他谈到了Java1.8中的新方法# 6 楼答案
扫描仪。skip跳过与模式匹配的输入,此处模式为:-
(\r\n |[\n\r\u2028\u2029\u0085])
\n换行符
\u2028匹配索引为2018基16(8232基10或20050基8)的字符,区分大小写