一尘不染

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

java

我试图在我的一种方法中建立用户输入验证系统…在一定程度上可以正常工作,但是尽管有代码,但它仍然允许整数作为有效输入,我不希望这样,我怎么能更改此代码,以仅允许将字母(字符串)作为有效输入。在这一点上,我感到困惑,我尝试使用整数对该系统进行测试,它可以完美地工作,但是使用字母,无济于事。

有见识?

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

}

阅读 189

收藏
2020-12-03

共1个答案

一尘不染

更换

            if(scan.hasNextLine()){

            if(scan.hasNext("\\p{Alpha}*")){

如果使用hasNextLine扫描仪,则仅检查下一步是否有 东西 ,特别是对于字母或其他物品。

当您使用正则表达式时,在这种情况下p{Alpha}*,其含义是“零个或多个字母”(但是扫描仪将查找至少一个非空格字符,因此实际上是“
1个或多个字母”),扫描仪的行为类似于当您执行相同的操作hasNextInt()(正在寻找数字)时会执行此操作。

请注意,它将仅接受US-ASCII范围内的字母,因此,仅不带重音符号或北欧字母或类似的字母a-zA-Z

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

2020-12-03