如何使用扫描仪验证用户输入而不是通过它进行循环

时间:2015-11-20 20:03:42

标签: java

我想在程序继续之前验证用户输入。例如:

变量String名称。该程序显示'输入姓名'如果用户键入数字而不是字符串,则应弹出一条消息,并使用户将字符串分配给名称。

这是我到目前为止所做的:

System.out.println("Enter name");
String name = input.nextLine();

我尝试过try / catch但是没有用。我尝试使用

  if(input.hasNextInt()){System.out.println("Type in a string!");}

但是这会继续通过该计划并仍然为一个号码指定一个号码'。它不会给用户第二次机会将字符串分配给' name'

3 个答案:

答案 0 :(得分:0)

这是让你开始使用正则表达式的东西。它仅检查StringA-Za-z之间的字符。看看当你尝试输入“FirstName LastName”时会发生什么,看看你是否可以弄清楚如何修复它。

Scanner input = new Scanner(System.in);
String name;
while(true){
    System.out.println("Enter name");
    name = input.nextLine();
    if (name.matches("[A-Za-z]+")){
        break;
    }else{
        System.out.println("Please enter only letters");
    }
}
System.out.println("Name selected: "+name);

括号末尾的加号检查您是否至少一个字符。因此,如果您输入空白名称,它将转到else

答案 1 :(得分:0)

使用String matches()方法可以非常简单地进行数字检查。此方法告知字符串是否与给定的正则表达式匹配。

String name = "Shrek";

if (name.matches(".*\\d+.*")) {
    // Do whatever you want to do if the name contains a number
}

答案 2 :(得分:-1)

尝试此解决方案,当用户输入无效内容时,弹出窗口验证输入。

public class Test {

static String name;

public static void main(String[] args) {
    final JFrame parent = new JFrame();

    parent.pack();
    parent.setVisible(false);
    name = JOptionPane.showInputDialog(parent,
            "Enter name", null);

    while (true) {
        if (name.matches("[A-Za-z]+")) {
            break;
        } else {
             name = JOptionPane.showInputDialog(parent,
                    "Please enter only letters", null);
            if (name.matches("[A-Za-z]+"))
                break;

        }
    }
    System.out.println("Name selected: " + name);
  }

}