本问题已经有最佳答案,请猛点这里访问。
我是一名学生,在验证输入方面有点问题。
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是否是唯一的数字。
请告诉我该怎么做。
名称使用regex [A-Za-z],数字使用\\d。但您不认为名称可以包含除字母字符之外的其他字符吗,例如空格?
@Christopher不是一个副本,因为它要求同时验证数字和非数字输入。但显然关系重大。
顺便说一下,我投了反对票。这个话题已经在这个网站上讨论了很多次,你应该能够通过一些先前的研究找到答案。
可以使用正则表达式检查输入是否与约束匹配,如下所示:
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工作的话,你必须把这个数字读成一个字符串。另外,您应该正确地缩进示例代码。
是的,你是对的。
还有"更高级"的regex解决方案。Java模式文档
如果使用nextline()读取两个输入,则可以使用此(未测试的代码):
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,如下所示:
double number;
System.out.println("Enter number:");
if (keyboard.hasNextDouble()){
name = keyboard.nextDouble();
}
查看scanner类文档了解更多信息。
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)检查它是否不是字母:
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。