我无法弄清楚为什么这个循环甚至不执行一次:
String s = "1 2\n3 4";
Scanner scanner = new Scanner(s);
while(scanner.hasNext("\\d\\s\\d")) {
System.out.printf("%d %d\n", scanner.nextInt(), scanner.nextInt());
}
根据我的理解,“\ d \ s \ d”表示数字后跟空格后跟另一个数字 - 确切地说输入是什么,但循环从不执行一次。
我的意图是使用带有stdin的Scanner,我想确保输入有一个由空格分隔的两位数对的序列,但上面的代码示例是简化的,因为我假设我做错了我的方法使用正则表达式。
有人可以提供解释吗?提前谢谢。
答案 0 :(得分:0)
在String
的标记化后应用hasNext(String)
提供的模式Scanner
。
如果下一个标记与从中构造的模式匹配,则返回true 指定的字符串。
默认情况下,这是空格。因此\\d\\s\\d
适用于1
中的字符String s
。显然,这并不匹配。
答案 1 :(得分:0)
根据您的评论,我相信您最好在此处使用String#split
:
String s = "1 2\n3 4";
toks = s.split( "\n" );
for (String tok: toks)
System.out.printf("<%s>%n", tok);
<强>输出:强>
<1 2>
<3 4>
PS:您也可以使用正则表达式来匹配您的号码{/ 1}}:
Scanner
<强>输出:强>
String s = "1 2\n3 4";
Scanner scanner = new Scanner(s);
while(scanner.hasNext("\\d+")) {
System.out.printf("<%d %d>%n", scanner.nextInt(), scanner.nextInt());