我是初学者程序员(这里的第一篇文章!)我无法弄清楚如何使用“do while”循环创建错误消息。如果给定的输入不在字母表中,则应该显示错误消息,直到给出仅包含字母的输入,然后移动到程序的其余部分。即使给出正确的输入,我的代码似乎永远循环。任何建议都非常感谢! :)
do {
input = JOptionPane.showInputDialog("What is your name?");
if (input.contains("[a-zA-Z]"))
name = input;
else
System.out.println("Please enter a valid name containing: ‘a-z’ or ‘A-Z’ lower or upper case");
} while (!input.contains("[a-zA-Z]"));
答案 0 :(得分:1)
答案 1 :(得分:0)
String.contains()
方法匹配一组字符序列。
您指定的是正则表达式,因此,您应该使用String.matches()
或Pattern
类来执行检查。
使用Pattern
类应该是这样的。
Pattern p = Pattern.compile("[a-zA-Z]+");
Matcher m = p.matcher(input);
if(m.matches){
//Do something
}
有关详细信息,请参阅此{{3}}
答案 2 :(得分:0)
input.contains("[a-zA-Z]")
检查输入是否包含文本[a-zA-Z]。
您可以使用matches方法。
input.matches("[a-zA-z]+")
此外,您应该使用[a-zA-z] +作为模式,因为您尝试匹配一个或多个字母。
答案 3 :(得分:0)
问题与您检查给定输入的方式有关。
String input;
String name = "";
do {
input = JOptionPane.showInputDialog("What is your name?");
if (input.matches("[a-zA-Z]+")) {
name = input;
} else {
System.out.println("Please enter a valid name containing: ‘a-z’ or ‘A-Z’ lower or upper case");
}
} while (!input.matches("[a-zA-Z]+"));
使用字符串的匹配功能可以帮助您实现您想要的功能
答案 4 :(得分:0)
您使用错误的方法验证正则表达式。 .contains()
需要char序列。那不是你想要的。
您应该使用.matches()
方法。
String input = "";
do{
input = JOptionPane.showInputDialog("What is your name?");
if (input.matches("[a-zA-Z]+")) // Replacing the contains()
name = input;
else
System.out.println
("Please enter a valid name containing: ‘a-z’ or ‘A-Z’ lower or upper case");
}while (!input.matches("[a-zA-Z]+")); //Once again replacing contains()