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

Sha*_*fox 0 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();
}
}
Run Code Online (Sandbox Code Playgroud)

awk*_*ksp 5

for(int i = 0;i>check.length();i++)
Run Code Online (Sandbox Code Playgroud)

你的for循环永远不会被输入,因为我不相信它String的长度可能是负面的......

你的意思是<代替吗?

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

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

allow = String.matches("[a-zA-Z]{1,}");
Run Code Online (Sandbox Code Playgroud)

  • 很好的解释答案(+1). (3认同)