java - 如何检查严格格式的输入?

标签 java input formatting minesweeper

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

对于标记命令(显示、猜测、标记): [“显示”/“r”] [int] [int]

寻求帮助并退出: 只是[“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 语句旨在抛出打印“命令无法识别”的默认情况。我意识到我的部分问题是它们位于两个单独的 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");

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

关于java - 如何检查严格格式的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28352859/

相关文章:

java - 为 PrimeFaces remoteCommand 生成并使用唯一名称

c - scanf() 函数中 % 符号后的 # 符号是什么意思?

c# - 模拟测试中的标准输入

java - Apache Commons Lang StringUtils 较慢

java - 我不确定如何构建我的算术方法

html - 真的有必要在 html 输入中包含 type ="text"属性吗?

Bash 格式的十六进制字符串

python - 格式字符串语法 : printing percentage with at least one significant digit

javascript - 使用纯 JavaScript 将电话号码格式化为用户类型

java - 我应该同步 DataSource 的 getConnection() 吗