我正在使用这些Scanner方法nextInt()并nextLine()阅读输入.
它看起来像这样:
System.out.println("Enter numerical value");
int option;
option = input.nextInt(); // Read numerical value from input
System.out.println("Enter 1st string");
String string1 = input.nextLine(); // Read 1st string (this is skipped)
System.out.println("Enter 2nd string");
String string2 = input.nextLine(); // Read 2nd string (this appears right after reading numerical value)
Run Code Online (Sandbox Code Playgroud)
问题是输入数值后,第一个input.nextLine()被跳过而第二个input.nextLine()被执行,所以我的输出如下所示:
Enter numerical value
3 // This is my input
Enter 1st string // The program is supposed to stop here and …Run Code Online (Sandbox Code Playgroud) 在回答另一个问题时,我写了一个正则表达式来匹配所有空格,最多包括一个换行符.我使用负面的lookbehind为\Rlinebreak matcher 做了这个:
((?<!\R)\s)*
Run Code Online (Sandbox Code Playgroud)
之后我正在思考它,我说,哦,不,如果有一个\r\n?当然它会抓住第一个破线的角色\r,然后我会\n在下一个弦的前面陷入虚假,对吗?
所以我回去测试(并且可能修复)它.但是,当我测试模式时,它匹配整个模式\r\n.它与人们可能期望的\r离开不匹配\n.
"\r\n".matches("((?<!\\R)\\s)*"); // true, expected false
Run Code Online (Sandbox Code Playgroud)
然而,当我使用中提到的"等价物"模式文档的\R,它返回false.这是Java的一个错误,还是它有匹配的正当理由?