多个||一个if语句中的语句

时间:2014-05-17 21:26:23

标签: java if-statement boolean

我试图让我的程序检查播放器输入的名称,看它是否使用任何无效字符。在我看来,如何让它工作似乎是有道理的,但它似乎不适用于实际环境。当我运行它,并且我使用无效字符时,它将继续执行程序的下一部分。关于如何解决它的任何想法?

这是我的相关代码块:

if (!(nameInput.getText().equals(""))) {
    boolean allow = true;
    String check = nameInput.getText();
    for (int i = 0;i>check.length();i++) {
        if (check.charAt(i) == '`' || check.charAt(i) == '~' ||
                check.charAt(i) == '!' || check.charAt(i) == '@' ||
                check.charAt(i) == '#' || check.charAt(i) == '$' ||
                check.charAt(i) == '%' || check.charAt(i) == '^' ||
                check.charAt(i) == '&' || check.charAt(i) == '*' ||
                check.charAt(i) == '(' || check.charAt(i) == ')' ||
                check.charAt(i) == '_' || check.charAt(i) == '+' ||
                check.charAt(i) == '=' || check.charAt(i) == '[' ||
                check.charAt(i) == ']' || check.charAt(i) == '{' ||
                check.charAt(i) == '}' || check.charAt(i) == ';' ||
                check.charAt(i) == '\''|| check.charAt(i) == ':' ||
                check.charAt(i) == '"' || check.charAt(i) == '<' ||
                check.charAt(i) == '>' || check.charAt(i) == '?' ||
                check.charAt(i) == ',' || check.charAt(i) == '.' ||
                check.charAt(i) == '/' || check.charAt(i) == '\\'||
                check.charAt(i) == '|' || check.charAt(i) == '1' ||
                check.charAt(i) == '2' || check.charAt(i) == '3' ||
                check.charAt(i) == '4' || check.charAt(i) == '5' ||
                check.charAt(i) == '6' || check.charAt(i) == '7' ||
                check.charAt(i) == '8' || check.charAt(i) == '9' ||
                check.charAt(i) == '0') {
            allow = false;
        }
    }
    if (allow == true) {
        player = new Player(check);
        window.refresh();
        mainMenu();
    } else {
        JOptionPane.showMessageDialog(window, "Invalid Name(Uses invalid Characters","Invalid!", JOptionPane.OK_OPTION);
    }
} else {
    JOptionPane.showMessageDialog(window, "Can Not Leave Name Blank!", "Missing Name!", JOptionPane.OK_OPTION);
    window.refresh();
    createPlayer();
}
}

3 个答案:

答案 0 :(得分:5)

for(int i = 0;i>check.length();i++)

我永远不会输入您的for循环,因为我不相信String的长度可能会消极...

您的意思是使用<吗?

此外,还有显着更好的方法来检查有效名称,而不是一个巨大的字符检查链。

一种方法是使用正则表达式;查看Java的Pattern课程和Google学习正则表达式。这样你就可以减少你的循环和if-block(我想;我只是接受了字母字符,并且基于对怪物的快速浏览而拒绝了其他所有内容):

allow = String.matches("[a-zA-Z]{1,}");

答案 1 :(得分:1)

如果你真的有兴趣只允许包含不在该列表中的字符的字符串,你可以使用这样的正则表达式。

allow = check.matches("[^]`~!@#$%^&*()_+=[{};':\"<>?,./\\\\|1234567890]*");

如果allow完全由不在列表中的字符组成,则会将true设置为check

请注意,我将^放在[内 - 这意味着“不是”。我还将]移到^之后,以便在关闭列表时不会将其解释为。

答案 2 :(得分:0)

更改

for(int i = 0;i>check.length();i++)

for(int i = 0;i<check.length();i++)

由于i为0,明显少于check.length()程序流从未真正进入for循环。

另外,只需检查""添加空检查。

if(nameInput.getText()!=null && !(nameInput.getText().equals(""))){..}