2

我正在用 Java 做一些事情,需要输入与模式 ^[1-5]$ 匹配。我应该有一个 while 循环遍历每一行输入,根据模式检查它,如果没有则输出错误消息。

须藤代码:

while (regex_match(/^[^1-5]$/,inputLine)) {  
    print ("Please enter a number between 1 and 5! ");  
    getNextInputLine();
}  

我可以使用java.util.Scanner.hasMatch("^[^1-5]$"),但这只会匹配一个标记,而不是整行。关于如何使 hasMatch 与整条线匹配的任何想法?(将分隔符设置为“\n”或“\0”不起作用。)

编辑:如果这是不可能的,还有其他方法吗?

4

1 回答 1

5

目前还不清楚你到底在问什么。

  • hasNextInt()可以告诉你是否有int nextInt()。然后,您可以检查它是否在 1-5 之间,以及是否没有提示另一个。这似乎是最干净的选择,甚至不使用正则表达式。

  • hasNext("[1-5]")可以告诉您下一个令牌的整体是否nextInt()在 1-5 之间。这实际上有点严格,因为如果下一个标记是 ,"005"它不匹配。您可以使正则表达式更复杂以适应这种情况,但此时上面的第一个选项变得更具吸引力。

  • findInLine(String pattern)可以找到一个模式,忽略分隔符,跳过任何不匹配的输入。例如,您可以从输入中提取数字"I want to buy 3 apples, please!"。这可能不是您所需要的(但问题并不清楚)。


另一种可能性是,您可能不仅需要下一个标记是^[1-5]$,而且还希望整个下一行都与之匹配。如果是这样的话,那么也许你需要这样的东西:

String line = scanner.nextLine();
if (!line.matches("^[1-5]$")) {
  // error message
} else {
  int num = Integer.parseInt(line);
}

如果您想检查是否nextLine()匹配该模式而不使用该行,那么您可以执行以下操作:

if (scanner.findInLine("^[1-5]$") != null) {
  // nextLine().matches("[1-5]");
}
于 2010-04-24T02:15:24.320 回答