验证输入仅为字符串且仅为数字 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

仅为第一个字符拆分字符串。 Java的

使用 jquery 验证器插件仅为 2 个十进制数字 + 点 + 逗号设置正则表达式

twitteR R API getUser,用户名仅为数字

Spring Security:仅为经过身份验证的用户执行 jQuery 代码

仅为授权配置弹簧安全性?

检查 PESEL 仅为 11 位数字 - ORA-04073: 列列表无效