我试图在我的一种方法中建立用户输入验证系统…在一定程度上可以正常工作,但是尽管有代码,但它仍然允许整数作为有效输入,我不希望这样,我怎么能更改此代码,以仅允许将字母(字符串)作为有效输入。在这一点上,我感到困惑,我尝试使用整数对该系统进行测试,它可以完美地工作,但是使用字母,无济于事。
有见识?
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; } }
更换
if(scan.hasNextLine()){
与
if(scan.hasNext("\\p{Alpha}*")){
如果使用hasNextLine扫描仪,则仅检查下一步是否有 东西 ,特别是对于字母或其他物品。
hasNextLine
当您使用正则表达式时,在这种情况下p{Alpha}*,其含义是“零个或多个字母”(但是扫描仪将查找至少一个非空格字符,因此实际上是“ 1个或多个字母”),扫描仪的行为类似于当您执行相同的操作hasNextInt()(正在寻找数字)时会执行此操作。
p{Alpha}*
hasNextInt()
请注意,它将仅接受US-ASCII范围内的字母,因此,仅不带重音符号或北欧字母或类似的字母a-zA-Z。
a-zA-Z
另外,请使用scan.next()而不是读取用户名nextLine()-尽管您可能想nextLine()稍后再调用以清理该行的其余部分。如果您用于nextLine()读取用户名,则字母后面可能有一些不是字母的内容,它将由读取nextLine()。
scan.next()
nextLine()