我试图在我的一个方法中创建一个用户输入验证系统...它的工作正常,但是尽管有代码,它仍然允许整数作为有效输入,我不希望它,我怎么能改变这段代码,只允许字母(字符串)作为有效输入。在这一点上我感到困惑,我尝试使用这个系统整数,它完美无缺,但有字母,无济于事。
洞察?
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;
}
}
答案 0 :(得分:2)
替换
if(scan.hasNextLine()){
与
if(scan.hasNext("\\p{Alpha}*")){
如果您使用hasNextLine
,扫描仪只会检查下一步是否 ,尤其是字母或其他内容。
使用正则表达式时,在这种情况下p{Alpha}*
表示"零个或多个字母" (但是扫描仪会查找至少一个不是空格的字符,因此它实际上是"一个或多个字母"),扫描仪的行为与使用{{{ 1}}(正在寻找数字)。
请注意,它只接受US-ASCII范围内的字母,所以没有重音或北欧字母或类似的字母,只有hasNextInt()
。
此外,请使用a-zA-Z
而不是scan.next()
阅读用户名 - 尽管您可能希望稍后再调用nextLine()
来清除该行的其余部分。如果您使用nextLine()
来阅读用户名,则字母后面可能会出现一些不是字母的内容,并且nextLine()
会读取该字母。
答案 1 :(得分:0)
为您的代码添加一个实际扫描数字的方法......
类似的东西:
private boolean containsNumbers(String name) {
char[] chars = name.toCharArray();
for (char c : chars) {
if (c > 47 && c < 58) {
return true;
}
}
return false;
}
答案 2 :(得分:0)
尝试类似“
的内容if (!userName.matches(".*\\d+.*")) {
System.out.println("Only strings no numbers");
}
答案 3 :(得分:0)
我将从Ubica获取代码。你也可以这样做。它是可读的:
private boolean containsNumbers(String name) {
char[] chars = name.toCharArray();
for (char c : chars) {
if (Character.isDigit(c)) {
return true;
}
}
return false;
}