Hus*_*ain 2 java regex input line java.util.scanner
我正在用Java做一些事情,要求输入与模式^ [1-5] $匹配.我应该有一个while循环遍历每行输入,根据模式检查它,如果没有,则输出错误消息.
Sudo代码:
while (regex_match(/^[^1-5]$/,inputLine)) {
print ("Please enter a number between 1 and 5! ");
getNextInputLine();
}
Run Code Online (Sandbox Code Playgroud)
我可以使用java.util.Scanner.hasMatch("^[^1-5]$"),但这只会匹配一个令牌,而不是整行.关于如何使hasMatch与整条线匹配的任何想法?(将分隔符设置为"\n"或"\ 0"不起作用.)
编辑:如果这不可能,还有其他方法吗?
目前尚不清楚你究竟在问什么.
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);
}
Run Code Online (Sandbox Code Playgroud)
如果要检查nextLine()模式匹配是否不消耗该行,则可以执行以下操作:
if (scanner.findInLine("^[1-5]$") != null) {
// nextLine().matches("[1-5]");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2739 次 |
| 最近记录: |