![](/img/trans.png)
[英]Is there a way to tie multiple if statements to one else statement?
[英]Multiple || statements in one if statement
我試圖讓我的程序檢查播放器輸入的名稱,以查看它是否使用了任何無效字符。 在我看來,如何使其有效似乎很有意義,但在實際環境中似乎無效。 當我運行它並且使用無效字符時,它將繼續進行到程序的下一部分。 關於如何解決它的任何想法?
這是我的相關代碼塊:
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();
}
}
for(int i = 0;i>check.length();i++)
您永遠不會輸入for
循環,因為我不認為String
的長度可以為負。
您是否打算使用<
代替?
另外,還有一些顯著更好的方法來檢查不是字符檢查的一個巨大的鏈條有效的名稱。
一種方法是使用正則表達式。 查看Java的Pattern類和Google以學習正則表達式。 這樣,您就可以減少循環和阻塞的次數(我認為;我只接受字母字符,而基於對這種怪異的一瞥,就拒絕了其他所有內容):
allow = String.matches("[a-zA-Z]{1,}");
如果您真的想只允許包含不在該列表中的字符組成的字符串,則可以使用這樣的正則表達式來實現。
allow = check.matches("[^]`~!@#$%^&*()_+=[{};':\"<>?,./\\\\|1234567890]*");
如果check
完全由列表中未包含的字符組成,則將allow
設置為true
。
請注意,我在[
-的內部放置了^
-這表示“不是”。 我也將[ ]
移到了^
,因此不會被解釋為關閉列表。
更改
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(""))){..}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.