不要打擾使用正則表達式爲此。設置一個得到了所有你想匹配的HashSet
和使用contains
所以外的所有類的方法中的字符串常量,你就會有
private static final Set<String> validOptions = new HashSet<>(Arrays.asList("Yes", "YES", "No", "no", "Y", "y", "N", "n"));
,並驗證,你只有
while (true) {
addAnother = JOptionPane.showInputDialog("Would you like to enter another salespersons' data?");
if (validOptions.contains(addAnother)) {
break;
}
System.out.println("Not a valid option");
}
更新
有很多方法來改善這種, 當然。 @blackpen在評論中提出了一對夫婦。一個非常好的方法是將所有這些分解到單獨的方法中,並且實際返回true或false來指示用戶對問題回答是或否。所以你的班級可能包括所有這些。
public class GregsFunkyClass {
private static final Map<String,Boolean> validOptions = new HashMap<>();
static {
validOptions.put("yes", true);
validOptions.put("y", true);
validOptions.put("no", false);
validOptions.put("n", false);
}
private boolean shouldEnterMoreData() {
while (true) {
String input = JOptionPane.showInputDialog("Would you like to enter another salespersons' data?");
boolean toReturn = validOptions.get(input.trim().toLowerCase());
if (toReturn != null) {
return toReturn;
}
System.out.println("Not a valid option");
}
}
}
然後就可以調用在類其他方法這個方法,真正得到你要找的答案。在這裏,調用trim()
將刪除前導空格和尾部空格,並且調用toLowerCase()
會使混合大小寫或大寫輸入匹配我們實際放入映射中的值。
注意 - 你做了一些奇怪的事情,把控制檯輸出與GUI輸入混合起來。通常,應用程序是GUI或控制檯應用程序,但不是混合應用程序。如果用戶輸入了錯誤的選項,您可能希望實際在誤操作時輸出錯誤消息,而不是在控制檯上。我沒有在這裏做過,但希望你能明白。
嘗試使用正則表達式? **「^((是)|(y)|(no)|(n))$」**通過先從兩端刪除空格,然後將** addAnother **變量先轉換爲小寫? – blackpen