验证输入仅为字符串,数字仅为JAVA

Validation input to be string only and numbers only JAVA

本问题已经有最佳答案,请猛点这里访问。

我是一名学生,在验证输入方面有点问题。

1
2
3
4
5
6
7
8
9
String name;
System.out.println("Enter name:");
name = keyboard.nextLine();
//If name contain other than alphabetical character print an error

double number;
System.out.println("Enter number:");
name = keyboard.nextDouble();
//If number contain other than number print an error

我尝试的是将字符串解析为double的测试,但我做不到。我不知道如何测试double是否是唯一的数字。

请告诉我该怎么做。


可以使用正则表达式检查输入是否与约束匹配,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
String name;
System.out.println("Enter name:");
name = keyboard.nextLine();
if (!name.matches("[a-zA-Z_]+")) {
    System.out.println("Invalid name");
}
String number;
System.out.println("Enter number:");
number = keyboard.nextLine();
if (!number.matches("[0-9]+")) {
    System.out.println("Invalid number");
}

这里有一个学习regex的好教程。


还有"更高级"的regex解决方案。Java模式文档

如果使用nextline()读取两个输入,则可以使用此(未测试的代码):

1
2
 boolean isWordOnly = Pattern.matches("\w*", name);    //name is in your code
 boolean isFloatOnly = Pattern.matches("\d*.?\d*", number);    //number is in your code too

现在,太布尔值告诉您输入中是否有所需的格式。您可以将它添加到do-while循环或任何您想要的循环中。

开始学习Reg(ular)Ex(Presions)是一个好主意,因为它们在字符串格式中很有用(假设您必须测试输入是否是有效的电子邮件…)。通常也用于检查SQL注入和应用程序和程序中的许多关键内容。


你好像在用scanner。如果是,可以使用scanner类'hasNextDouble()在读取double之前检查输入是否为double,如下所示:

1
2
3
4
5
double number;
System.out.println("Enter number:");
if (keyboard.hasNextDouble()){
    name = keyboard.nextDouble();
}

查看scanner类文档了解更多信息。


1
2
3
4
5
6
double number = 0;
try {
    number = Double.parseDouble(name)
} catch (NumberFormatException ex) {
    System.out.println("Name is not a double.");
}

如果number不是双份的,你可以抓一份NumberFormatException


您可以循环遍历String的每个字符,并使用Character.isAlphabetic(char)检查它是否不是字母:

1
2
3
4
5
6
7
8
9
10
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter name:");
String name = keyboard.nextLine();

for (char c : name.toCharArray()) {
    if (!Character.isAlphabetic(c)){
        System.out.println("INVALID");
        break;
    }
}

要只接受数字,可以使用Character.isDigit(char)函数执行类似的操作,但请注意,必须将输入读取为String而不是double,或者将输入读取为double并使用Double.toString(d)将其转换为String