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

标签 java regex input line java.util.scanner

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

相关文章:

JavaScript 从字符串中删除句号、逗号和空格

javascript - 单击不在 React.js 中表单内部的按钮后如何重置输入值

启动简单 Struts2 应用程序时的 java.lang.ClassNotFoundException : org. apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

java - 创建单独的类的替代方法

java - Apache 共享数学 : restricting optimization domain

java - 使用 Java Regex 从 String 中提取数据

java - 保存checkedtextview状态时出现问题,它对多个项目表现不佳

java - 在Java中解析管道分隔的字符串(管道可以转义)

html - 将空值插入文本输入

javascript - 按键时获取值错误