gpt4 book ai didi

java - 使用 java.util.scanner.hasNext(regex) 获取整行

转载 作者:行者123 更新时间:2023-11-30 06:38:01 24 4
gpt4 key购买 nike

我正在用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com