我试图让这个循环继续。到目前为止,当输入与我的REGEX不匹配时,显示“input not valid”,但循环不会继续。我在这里遗漏了什么?
感谢您的帮助!
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String input;
//some variables
Pattern pattern = Pattern.compile(REGEX);
Scanner scn = new Scanner(System.in);
boolean found = false;
do {
System.out.println("ask user for input");
input = scn.next();
Matcher matcher = pattern.matcher(input);
try {
matcher.find();
//some Code
found = true;
scn.close();
} catch (IllegalStateException e) {
System.out.println("input not valid."); //stuck here
scn.next();
continue;
}
} while (!found);
// some more Code
}
}
4条答案
按热度按时间kx5bkwkv1#
您的程式码有许多问题:
IllegalStateException
不是由“not-match”引发的,而是由Scanner类引发的,那么为什么要捕获它呢?matcher.find()
的结果执行任何操作,我认为您需要found = matcher.find()
scn.next();
此外:
boolean found;
简化boolean found = false;
的初始化continue;
固定代码:
mv1qrgav2#
在我看来,“input not valid”行后面的
scn.next()
没有执行任何操作,而是等待用户输入一个字符串,这就是为什么循环看起来没有继续:它等待你输入一个字符串,因为有了这行代码,但是,当你输入一些东西时,输入的内容就会被丢弃,删除这行代码似乎就可以了。yruzcnhs3#
看看你的循环,你的循环状态的条件是!找到了正确的,一旦do完成了while测试!找到了一个true是需要继续,但你定义了找到为true,所以!找到= false,所以while停止。你应该得到找到返回false,直到循环结束
s5a0g9ez4#
让我们尽量保持简单。
其结果是: