.hasNextInt的替代方法?

时间:2015-12-08 20:14:32

标签: java java.util.scanner

我是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 个答案:

答案 0 :(得分:1)

这里使用if(input.hasNextInt()){是错误的。您想要在之前输入的字符串memberName

中找到数字

您可以将regex用于此目的:

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

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

System.out.println(digitPattern.matcher("Marcinek 234").matches());

答案 1 :(得分:1)

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分配给整行。

答案 2 :(得分:1)

尝试创建自己的方法,测试传递的名称是否有效。它可以看起来像这样:

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

答案 3 :(得分:0)

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

hasNextLine()

或者你可以使用:

hasNext()

并试着改变这个:

 while (successful == false);

有了这个:

  while (successful); 

答案 4 :(得分:0)

您可以使用:enteredName.contains(“1”)来检查数字。 例如:

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