我是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");
发生
答案 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;
}