最近几个小时我一直试图让这段代码只允许字符输入,就像接受名字一样。 我一直遵循同样类型的方法,我曾经只允许整数,但没有运气。 任何建议都会很棒, 这是我的代码
String name;
System.out.println("Enter student's name: ");
name = in.nextLine();
while (!in.nextLine().matches("[a-zA-Z]"));
{
System.out.println("Please enter a valid name!: ");
in.next();
}
name = in.nextLine();
答案 0 :(得分:1)
我个人并不熟悉正则表达式,所以我会选择一个带字符串的方法,并确定它是否只包含字母表。
[编辑]对我来说很惭愧,测试一个字符是否为字母的方法是静态的。感谢dansalmo提醒我。
public static boolean isAlphabetic(String s) {
for(int i = 0; i < s.length(); i++) {
if (!Character.isLetter(s.charAt(i))) return false;
}
return true;
}
答案 1 :(得分:1)
您的正则表达式检查该行是否与正好一个 [a-zA-Z]字符匹配。您可能想要检查至少一个:[a-zA-Z]+
请记住,您检查的方式是,您不会在变量名称中获得已检查的内容,因为您在检查时正在使用它。我可以提出一个替代方案:
System.out.println("Enter student's name: ");
String name = in.nextLine();
while(!name.matches("[a-zA-Z]+")){
System.out.println("Please enter a valid name!");
name = in.nextLine();
}
答案 2 :(得分:0)
您是否检查过变量名称的值? 当您将输入分配给name时,您似乎会阅读下一行以进行正则表达式检查。 也删除了in.next,它应该可以正常工作
答案 3 :(得分:0)
与Bucco的解决方案类似,但迭代了char数组:
public static boolean isAlphabetic(String s) {
for(char c : s.toCharArray())
if (!Character.isLetter(c)) return false;
return true;
}