验证输入仅为字符串且仅为数字 JAVA [重复]
Posted
技术标签:
【中文标题】验证输入仅为字符串且仅为数字 JAVA [重复]【英文标题】:Validation input to be string only and numbers only JAVA [duplicate] 【发布时间】:2014-07-17 08:15:31 【问题描述】:我是一名学生,我对验证输入有一点问题。
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
我尝试过将字符串解析为双倍的测试,但我做不到。 我不知道如何测试双精度是否只是数字。
请告诉我应该怎么做。
【问题讨论】:
使用正则表达式[A-Za-z]
作为名称,使用 \\d
作为数字。但是您不认为名称可以包含其他字母字符,例如 空格?
@christopher 不是重复的,因为这要求验证数字和非数字输入。但显然密切相关。
顺便说一句,我投了反对票。这个话题已经在这个网站上讨论过很多次了,你应该可以通过之前的一些研究找到答案。
【参考方案1】:
您可以使用Regular expression 来检查输入是否符合您的约束,如下所示:
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");
Here is 学习正则表达式的好教程。
【讨论】:
几乎正确 - 但如果您希望正则表达式工作,您必须将数字作为字符串读取。另外,你真的应该正确缩进你的示例代码。【参考方案2】:您可以遍历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
。
【讨论】:
char c = evt.getKeyChar(); if (!(Character.isDigit(c) || c == KeyEvent.VK_BACK_SPACE || c == KeyEvent.VK_DELETE) || contactMobile.getText().length() == 10) evt.consume(); 【参考方案3】:double number = 0;
try
number = Double.parseDouble(name)
catch (NumberFormatException ex)
System.out.println("Name is not a double.");
如果number
不是双精度,您可以捕获NumberFormatException
。
【讨论】:
【参考方案4】:您似乎正在使用scanner
。如果你是,你可以使用Scanner
类'hasNextDouble()
在读取double之前检查输入是否为double,如下所示:
double number;
System.out.println("Enter number:");
if (keyboard.hasNextDouble())
name = keyboard.nextDouble();
查看Scanner
类docs 了解更多信息。
【讨论】:
【参考方案5】:还有“更高级”的正则表达式解决方案。 Java Pattern Documentation
如果您使用 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 注入和应用程序中的许多关键内容。
【讨论】:
以上是关于验证输入仅为字符串且仅为数字 JAVA [重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 jquery 验证器插件仅为 2 个十进制数字 + 点 + 逗号设置正则表达式