如何检查严格格式化的输入?

How to check for strictly formatted input?

我正在为扫雷的基本非递归、非 GUI 形式进行编码项目。要求之一是输入命令必须严格格式化,如下所示:

对于标记命令(显示、猜测、标记): ["reveal"/"r"] [整数] [整数]

寻求帮助并退出: 只是 ["help"/"h"] 或 ["quit"/"q"]

超出这些限制的任何输入都必须被视为格式错误。我的显示代码如下所示:

case "reveal":
case "r":
    roundsCompleted ++;
    if(input.hasNextInt()){
        par1 = input.nextInt();
    }
    else{
        commandIn = null;
    }
    if(input.hasNextInt()){
        par2 = input.nextInt();
        correctInput = true;
    }
    else{
        commandIn = null;
    }


    if(correctInput && isInBounds(par1, par2)){
        reveal(par1, par2);

当然,这一切都在 switch 语句中。 commandIn = null 语句旨在抛出打印 "command not recognized" 的默认情况。我在这里意识到我的部分问题是它们在两个单独的 if-else 语句中。另一个问题是,当第一个之后没有 int 时, input.hasNextInt() 似乎没有评估为 false 。

这个问题的实质是完全限制这些命​​令为我上面列出的格式。谁能给我一些关于这个问题的见解?谢谢

我会使用 regex 来首先查看某些内容是否是一个好的输入,或者只是因为它会更容易

    String input = "r 3 4";
    if (input.matches("^(help|h|quit|q|((r|reveal) \d \d))$"))
        //switch case
        System.out.println("match");

    else
        //null string
        System.out.println("no match");

然后在你得到匹配后你可以像你正在做的那样使用你的开关盒,如果它是 "reveal" 或 "r",我会使用 split()并将其转换为数组以获得不同的 x 和 y 坐标