如果我的REGEX不匹配,我如何继续提示输入?

z4iuyo4d  于 2022-12-05  发布在  其他
关注(0)|答案(4)|浏览(124)

我试图让这个循环继续。到目前为止,当输入与我的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

}
}
kx5bkwkv

kx5bkwkv1#

您的程式码有许多问题:

  • IllegalStateException不是由“not-match”引发的,而是由Scanner类引发的,那么为什么要捕获它呢?
  • 您没有对matcher.find()的结果执行任何操作,我认为您需要found = matcher.find()
  • 如果输入无效,则执行两次scn.next();

此外:

  • 您可以使用boolean found;简化boolean found = false;的初始化
  • 不需要在循环末尾使用continue;

固定代码:

boolean found;
    do {
        System.out.println("ask user for input");
        input = scn.next();
        found = pattern.matcher(input).find();
        if (!found) {
            System.out.println("input not valid.");
        }
    } while (!found);
    scn.close();
mv1qrgav

mv1qrgav2#

在我看来,“input not valid”行后面的scn.next()没有执行任何操作,而是等待用户输入一个字符串,这就是为什么循环看起来没有继续:它等待你输入一个字符串,因为有了这行代码,但是,当你输入一些东西时,输入的内容就会被丢弃,删除这行代码似乎就可以了。

yruzcnhs

yruzcnhs3#

看看你的循环,你的循环状态的条件是!找到了正确的,一旦do完成了while测试!找到了一个true是需要继续,但你定义了找到为true,所以!找到= false,所以while停止。你应该得到找到返回false,直到循环结束

s5a0g9ez

s5a0g9ez4#

让我们尽量保持简单。

import java.util.Scanner;
import java.util.regex.Pattern;

public class Main {
    private static final Pattern pattern = Pattern.compile("^[a-zA-Z0-9 ]+$");

    public static void main(String[] args) {
        Scanner scn = new Scanner(System.in);
        boolean valid;
        String value;
        do {
            System.out.println("ask user for input");
            value = scn.next();
            valid = pattern.matcher(value).matches();
            if (!valid) System.out.println("input not valid.");
        } while (!valid);

        System.out.printf("Valid input is %s", value);
    }
}

其结果是:

ask user for input
123-abc
input not valid.
ask user for input
qwerty58
Valid input is qwerty58
Process finished with exit code 0

相关问题