在JOptionPane中区分用户的输入

时间:2017-12-08 16:24:15

标签: java swing joptionpane

我想编写一个程序,向用户显示一个框,并要求输入名称。

如果名称输入正确(真实姓名),则会显示最终消息,但如果用户输入整数,则程序会要求用户再次在String中键入实名。

代码:

import javax.swing.*;

public class Project018 {
    public static void main(String[] args) {

    String name = JOptionPane.showInputDialog("What is your name?");

    try {

    int number = Integer.parseInt(name);

        } catch (NumberFormatException n){

             JOptionPane.showMessageDialog(null, "Dear " + name + "\nwelcome to java programming course");
        } 


    String message = String.format("your name must not contain any number");

        JOptionPane.showMessageDialog(null, message);
    }

}

我想知道当用户输入一个整数时如何将程序循环回顶部以及如何在输入实名时跳过第二条消息

1 个答案:

答案 0 :(得分:1)

  

我想知道当用户输入整数

时如何将程序循环回顶部

好吧,为此我会使用do-while循环。

要检查输入是否有数字,您不应该尝试将数字解析为整数。相反,我会使用PatternMatcher以及regex。否则,您不会考虑这种情况:Foo123

在这种情况下,例如:[0-9]+用于正则表达式,如果Matcher与之匹配,那么它就有一个数字。

  

输入实名时如何跳过第二条消息

根据Matcher是否匹配您显示一个对话框或另一个

的内容

例如:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

public class LoopingJOptionPane {
    private static final String REGEX = "[0-9]+";

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new LoopingJOptionPane()::createAndShowGui);
    }

    private void createAndShowGui() {
        boolean found = true;
        do { //This repeats this code if input is incorrect
            Pattern pattern = Pattern.compile(REGEX);

            String name = JOptionPane.showInputDialog("Enter your name");
            Matcher matcher = pattern.matcher(name); //We try to find if there's a number in our string

            found = matcher.find();

            if (found) { //If there's a number, show this message
                JOptionPane.showMessageDialog(null, "Please write only letters");
            } else { //Otherwise show this one
                JOptionPane.showMessageDialog(null, "Welcome " + name);
            }
        } while (found); //If it has no numbers, don't repeat
    }
}