坚持如何只进行字符串字符输入

时间:2013-12-04 01:54:29

标签: java

最近几个小时我一直试图让这段代码只允许字符输入,就像接受名字一样。 我一直遵循同样类型的方法,我曾经只允许整数,但没有运气。 任何建议都会很棒, 这是我的代码

            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();

4 个答案:

答案 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;
}