有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java替代方法。哈斯内克斯汀?

我是java新手,我想知道是否有一种不同的方法可以替代has。nextInt(),因为此方法会弄乱我的扫描仪。比如说

do {
    System.out.println("Please enter your full name: ");
    memberName = input.nextLine();
    if (input.hasNextInt()) {
        System.out.println("Your name cannot contain a number");
        input.next();
    } else {
        successful = true;
    }
} while (successful == false);

控制台

Create new member
Please enter your full name: 
jack 
jack

我必须输入两次我的名字才能继续 我知道有这样的问题,但我没有任何解决方案的运气。谢谢

编辑

我试图确保输入中根本不包含任何数字,如果包含,那么

System.out.print("Your name cannot contain any numbers");

发生


共 (5) 个答案

  1. # 1 楼答案

    这里使用if(input.hasNextInt()){是错误的。因为您想在先前输入的字符串中查找数字,该字符串为memberName

    为此,您可以使用正则表达式:

    Pattern digitPattern = Pattern.compile("\\d+");       
    

    然后您可以使用它来验证任何字符串:

    System.out.println(digitPattern.matcher("Marcinek 234").matches());
    
  2. # 2 楼答案

    您可以使用:enteredName。包含用于检查数字的(“1”)。 例如:

    boolean containsNumbers = false;
    for(int i = 0; i<9; i++){
    if (name.contains(""+i)) containsNumbers = true; 
    }
    
  3. # 3 楼答案

    do {
        System.out.println("Please enter your full name: ");
        memberName = input.nextLine();
        if (memberName.contains("1234567890")) {
            System.out.println("Your name cannot contain a number");
        } else {
            successful = true;
        }
        input.next();
    } while (successful == false);
    

    您在if语句中使用输入进行检查,但为整行指定了memberName

  4. # 4 楼答案

    尝试创建自己的方法,该方法将测试传递的名称是否有效。例如,它可以如下所示:

    private static boolean isValidName(String name){
        return name.matches("[a-z]+(\\s[a-z]+)*");//can be optimized with precompiled Pattern
    }
    

    现在,您的代码可以如下所示:

    System.out.println("Please enter your full name: ");
    do {
        memberName = input.nextLine();
        successful = isValidName(memberName);
        if (!successful) {
            System.out.println("Your name is not valid. Valid name can contain only letters and spaces. No digits are allowed.");
            System.out.println("Please try again: ");
        } 
    } while (!successful);
    System.out.println("welcome: "+memberName);
    
  5. # 5 楼答案

    如果您只想从用户输入中读取行,您可以使用:

    hasNextLine()
    

    或者您可以使用:

    hasNext()
    

    并尝试改变这一点:

     while (successful == false);
    

    为此:

      while (successful);