我正在 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”不起作用。)
编辑:如果这不可能,还有其他方法吗?
最佳答案
不清楚您到底在问什么。
hasNextInt()
可以告诉你是否有int nextInt()
。然后您可以检查它是否在 1-5 之间,以及是否不提示输入另一个。这似乎是最干净的选项,甚至不需要使用正则表达式。hasNext("[1-5]")
可以告诉您下一个标记的整体是否是 1-5 之间的nextInt()
。这实际上有点严格,因为如果下一个标记是"005"
,则它不匹配。您可以使正则表达式变得更复杂来适应这一点,但此时上面的第一个选项变得更具吸引力。findInLine(String pattern)
可以找到一个模式,忽略分隔符,跳过任何不匹配的输入。例如,您可以从诸如“我想买 3 个苹果,请!”之类的输入中提取数字。这可能不是您所需要的(但从问题中尚不清楚)。
另一种可能性是,也许您不仅需要下一个标记为 ^[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]");
}
关于java - 使用 java.util.scanner.hasNext(regex) 获取整行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2702857/