今晚第二次再次问好!我正在尝试创建一个错误消息,如果字符串的输入不包含单词/字符:是,是,否,否,Y,y,N,n;并循环返回以获得正确的输入。任何建议都非常感谢! :)
do{
addAnother = JOptionPane.showInputDialog("Would you like to enter another salespersons' data?");
if (!addAnother.matches("[YesYESNonoYyNn]"))
System.out.println("Valid answers: Yes, YES, No, no, Y, y, N, n");
}
while (addAnother.matches("[YesYESNonoYyNn]"));
答案 0 :(得分:2)
不要为此使用正则表达式。设置一个常量,使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或控制台应用程序,但不是混合应用程序。如果用户键入错误的选项,您可能希望在wee弹出窗口中而不是在控制台上实际输出错误消息。我在这里没有这样做,但希望你明白了。
答案 1 :(得分:0)
除了@ David的好答案,以防万一,如果你仍然想使用正则表达式(效率低下?),你也可以这样做:
public class Main {
public static boolean isYes(String str) {
String s1=str.trim();
return(s1.matches("(?i:^((yes)|(y))$)"));
}
public static boolean isNo(String str) {
String s1=str.trim();
return(s1.matches("(?i:^((no)|(n))$)"));
}
public static void main(String []args) {
System.out.println(isYes(" yes "));
System.out.println(isYes(" yEs "));
System.out.println(isYes(" y"));
System.out.println(isNo(" yes "));
System.out.println(isNo(" yEs "));
System.out.println(isNo(" y"));
//--------------------------------
System.out.println(isNo(" NO "));
System.out.println(isNo(" no "));
System.out.println(isNo("n "));
System.out.println(isYes(" NO "));
System.out.println(isYes(" no "));
System.out.println(isYes("n "));
}
}
输出:
true
true
true
false
false
false
true
true
true
false
false
false