【问题标题】:Validation input to be string only and numbers only JAVA [duplicate]验证输入仅为字符串且仅为数字 JAVA [重复]
【发布时间】: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 不是重复的,因为这要求验证数字和非数字输入。但显然密切相关。
  • 顺便说一句,我投了反对票。这个话题已经在这个网站上讨论过很多次了,你应该可以通过之前的一些研究找到答案。

标签: java


【解决方案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();
    }
    

    查看Scannerdocs 了解更多信息。

    【讨论】:

      【解决方案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 注入和应用程序中的许多关键内容。

      【讨论】:

        猜你喜欢
        • 2013-04-26
        • 2012-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-22
        • 1970-01-01
        • 2015-07-28
        相关资源
        最近更新 更多