我试图在我的方法之一中创建一个用户输入验证系统......它在一定程度上工作正常,但是尽管有代码,它仍然允许整数作为有效输入,我不希望它成为这样,我怎么能更改此代码,仅允许字母(字符串)作为有效输入。我在这一点上感到困惑,我尝试了这个系统的整数,它工作完美,但字母,无济于事。
Insight?
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;
}
}
Replace
if(scan.hasNextLine()){
with
if(scan.hasNext("\\p{Alpha}*")){
如果你使用hasNextLine
扫描仪仅检查是否有anything接下来,不是特别针对信件或其他任何东西。
当您使用正则表达式时,在这种情况下p{Alpha}*
这意味着“零个或多个字母”(但扫描仪将查找至少一个不是空格的字符,因此它实际上是“1个或多个字母”),扫描仪的行为与您执行相同操作时非常相似hasNextInt()
(正在寻找数字)。
请注意,它只接受 US-ASCII 范围内的字母,因此没有重音或挪威字母或类似的东西,只需a-zA-Z
.
另外,读取用户名scan.next()
, not nextLine()
- 虽然你可能想打电话nextLine()
稍后清洁生产线的其余部分。如果你使用nextLine()
读取用户名,字母后面可能有一些不是字母的东西,它会被读取nextLine()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)