Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用户输入验证,强制只包含字母的字符串_Java_Validation_Input - Fatal编程技术网

Java 用户输入验证,强制只包含字母的字符串

Java 用户输入验证,强制只包含字母的字符串,java,validation,input,Java,Validation,Input,我正在尝试在我的方法中建立一个用户输入验证系统。。。在某种程度上,它工作正常,但尽管有代码,它仍然允许整数作为有效输入,我不希望这样,我如何修改代码,只允许字母(字符串)作为有效输入。在这一点上,我感到困惑,我尝试了这个系统,用整数,它工作完美,但用字母,没有用 洞察力 public class Player { private static String userName; private Scanner scan = new Scanner(System.in);

我正在尝试在我的方法中建立一个用户输入验证系统。。。在某种程度上,它工作正常,但尽管有代码,它仍然允许整数作为有效输入,我不希望这样,我如何修改代码,只允许字母(字符串)作为有效输入。在这一点上,我感到困惑,我尝试了这个系统,用整数,它工作完美,但用字母,没有用

洞察力

public class Player {

    private static String userName;
    private Scanner scan = new Scanner(System.in);
    private boolean validInput = false;

    public void createUser(){

        do {
        System.out.println("Please enter you name : ");
                if(scan.hasNextLine()){
                    userName = scan.nextLine();
                    validInput = true;
                } else {
                    System.out.println("You can only use letters!");
                    validInput = false;
                    scan.next();
                }
    } while (!(validInput));
        System.out.println(getUser());
    }
    static void setUser(String userName){
        Player.userName = userName; 
    }
    String getUser(){
        return userName;    
    }

}

在代码中添加一个方法来实际扫描数字

大概是这样的:

private boolean containsNumbers(String name) {
    char[] chars = name.toCharArray();
    for (char c : chars) {
        if (c > 47 && c < 58) {
            return true;
        }
    }
    return false;
}
private boolean containsNumbers(字符串名){
char[]chars=name.toCharArray();
for(char c:chars){
如果(c>47&&c<58){
返回true;
}
}
返回false;
}
尝试类似以下内容


我将从Ubica获取代码。您也可以这样做。它是可读的:

private boolean containsNumbers(字符串名){
char[]chars=name.toCharArray();
for(char c:chars){
if(字符isDigit(c)){
返回true;
}
}
返回false;
}
更换

            if(scan.hasNextLine()){

如果您使用
hasNextLine
,扫描仪只会检查下一步是否有任何内容,尤其是字母或其他内容

当您使用正则表达式时,在本例中,
p{Alpha}*
表示“零个或多个字母”(但扫描器将查找至少一个非空白字符,因此它实际上是“1个或多个字母”),扫描器的行为与您使用
hasnetint()
(查找数字)时的行为非常相似

请注意,它只接受US-ASCII范围内的字母,因此没有重音或北欧字母或类似的字母,只接受a-zA-Z


另外,使用
scan.next()
,而不是
nextLine()
,读取用户名-尽管您可能希望稍后调用
nextLine()
,以清理该行的其余部分。如果使用
nextLine()
读取用户名,则字母后面可能有非字母的内容,并且将由
nextLine()读取

你到底在哪里检查用户输入的是字母而不是数字?你考虑过正则表达式吗?是的,我希望他们只使用字母,你的意思是什么?我是说Java提供了什么API来检查字符串内容()您可以指定的规则非常广泛-包括没有任何数字符号。可能这就是您需要的。这将只查看第一个字符。对:)没有真正检查代码:)我已经做了更改:)现在检查…它已修复:)只是不需要else语句
            if(scan.hasNextLine()){
            if(scan.hasNext("\\p{Alpha}*")){