在Java中强制执行有效输入

时间:2010-09-20 00:25:55

标签: java string validation char java.util.scanner

我有一个用Java编写的类,其中一个方法是getCommand() 此方法的目的是读取字符串并查看用户键入的内容是否与任何可接受的命令匹配。

这是我最初写的方式:

public char getCommand(){


    System.out.println("Input command: ");
     command = input.nextLine();

    while(command.length() != 1){
        System.out.println("Please re-enter input as one character: ");
        command = input.nextLine();
    }

    while(  command.substring(0) != "e" ||
            command.substring(0) != "c" || 
            command.substring(0) != "s" ||
            command.substring(0) != "r" ||
            command.substring(0) != "l" ||
            command.substring(0) != "u" ||
            command.substring(0) != "d" ||
            command.substring(0) != "k" ||
            command.substring(0) != "f" ||
            command.substring(0) != "t" ||
            command.substring(0) != "p" ||
            command.substring(0) != "m" ||
            command.substring(0) != "q"){
        System.out.println("Please enter a valid character: ");
        command = input.nextLine();
    }

    fCommand = command.charAt(0);

    return fCommand;

}

现在,我发现这个问题是因为我使用OR运算符,它不会转义该循环,因为我输入的字符总是不等于其中一个。我尝试将其更改为AND运算符,但同样的问题。仅接受这些特定角色的最佳方式是什么? 非常感谢。

2 个答案:

答案 0 :(得分:2)

你的逻辑错误。您应该使用逻辑AND而不是OR。另外,我认为您要使用charAt()代替substring(),然后比较字符。

即,

while(  command.charAt(0) != 'e' &&
        command.charAt(0) != 'c' && 
        command.charAt(0) != 's' &&
        ...)

否则,如果要测试实际的单字符串输入,只需使用字符串相等进行检查。

while(  !command.equals("e") &&
        !command.equals("c") &&
        !command.equals("s") &&
        ...)

答案 1 :(得分:0)

您应该将命令定义为常量(单独)。像这样的硬编码值使得将来更新代码变得更加困难。

如果程序只是概念验证或作业,我会使用:

private static final String COMMANDS = "ecsrludkftpmq";

while(!COMMANDS.contains(command.getChar(0)) {
  System.out.println("Please enter a valid character: ");
  command = input.nextLine();
}

否则,如果这是生产代码,我会考虑制作一个简单的Command(char)类,并提供单独的命令常量作为集合的一部分(可能是针对Character键的Map),可以对其进行测试以查看是否包含匹配命令。