解释用JAVA编写的这一行

May*_*ist 5 java java.util.scanner

在HACKERRANK中,这一行代码经常发生。我认为这是跳过空格,但那是什么"\r\u2028\u2029\u0085"意思

 scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
Run Code Online (Sandbox Code Playgroud)

Sur*_*ngh 12

Scanner.skip跳过与模式匹配的输入,这里的模式是:-

(\ r \ n | [\ n \ r \ u2028 \ u2029 \ u0085])?

  • ?精确匹配零或前一个字符。
  • | 另类
  • []匹配出现在单个字符
  • \ r匹配回车符
  • \ n换行符

  • \ u2028将字符与索引为2018的基数16(8232的基数10或20050的基数8)区分大小写

  • \ u2029将字符与索引为2029 base 16(8233 base 10或20051 base 8)区分大小写
  • \ u0085将字符与索引为85的基数16(133的基数10或205的基数8)匹配,区分大小写

第一种替代方案\ r \ n

  • \ r匹配回车符(ASCII 13)
  • \ n与换行符(ASCII 10)匹配

第二种选择[\ n \ r \ u2028 \ u2029 \ u0085]

  • 匹配[\ n \ r \ u2028 \ u2029 \ u0085]下面列表中存在的单个字符
  • \ n与换行符(ASCII 10)匹配
  • \ r匹配回车符(ASCII 13)
  • \ u2028按字面意义(区分大小写)匹配具有索引202816(823210或200508)的字符LINE SEPARATOR
  • \ u2029从字面上匹配具有索引202916(823310或200518)的字符(区分大小写)PARAGRAPH SEPARATOR
  • \ u0085从字面上匹配具有索引8516(13310或2058)的字符(区分大小写)NEXT LINE


mem*_*emo 6

跳过\r\n适用于Windows。

其余的是standard \r=CR\n=LF(请参阅\ r \ n,\ r,\ n有什么区别?

然后是一些Unicode特殊字符:

u2028 = LINE SEPARATORhttps://www.fileformat.info/info/unicode/char/2028/index.htm

u2029 = PARAGRAPH SEPARATORhttp://www.fileformat.info/info/unicode/char/2029/index.htm

u0085 = NEXT LINEhttps://www.fileformat.info/info/unicode/char/0085/index.htm


小智 6

OpenJDK 的源代码显示 nextLine() 使用此正则表达式作为行分隔符:

private static final String LINE_SEPARATOR_PATTERN = "\r\n|[\n\r\u2028\u2029\u0085]";
Run Code Online (Sandbox Code Playgroud)