如何让用户只输入小数?

时间:2013-11-26 17:08:27

标签: java input decimal

所以我对java很陌生并且和我的班级挣扎......这就是我认为会起作用的:

double costPerKiloHr = 0; //sets value to 0

    //tests to make sure a number was inputted

        try {
            costPerKiloHr = Double.parseDouble(
                this.costPerKiloHrText.getText());
        }   
        catch (Exception e) {
            JOptionPane.showMessageDialog(this, "Please input a dollar amount including cents",
                    "Error", JOptionPane.ERROR_MESSAGE);
            return;
        }

3 个答案:

答案 0 :(得分:0)

您可以使用正则表达式检查小数点后至少1个数值的匹配项。

    String input = scanner.next();
    Pattern pattern = Pattern.compile("[0-9]*\\.[0-9]+");
    Matcher matcher = pattern.matcher(input);
    if(matcher.matches()){
        System.out.println("True");
    }else{
        System.out.println("False");
    }

<强>输出

1.0   True
ASB   False
0.25  True
1     False

答案 1 :(得分:0)

如果你不是法师或者smth,你不能让用户输入你想要的东西。但您可以编辑接受用户输入的代码。可能存在巨大差异:我不知道您使用什么作为输入。我注意到你正在使用JOptionPane所以我猜你使用摇摆。

在摇摆中有JTextField,你可以像这样控制它的内容:

    final JTextField field = new JTextField();
    field.addKeyListener(new KeyListener() {

        StringBuilder buffer = new StringBuilder();

        @Override
        public void keyTyped(KeyEvent e) {
            char c = e.getKeyChar();
            if (Character.isDigit(c)) {
                buffer.append(c);
            }
        }

        @Override
        public void keyPressed(KeyEvent e) {
        }

        @Override
        public void keyReleased(KeyEvent e) {
            field.setText(buffer.toString());
        }
    });

如果您使用InputStream,则应将byte对解释为chars,然后过滤掉非数字值。这样就需要声明分隔符。

答案 2 :(得分:0)

假设您正在使用Swing(使用JOptionPane进行安全下注),您可以让用户输入javax.swing.JFormattedTextField ...这是JTextField的扩展名采用Formatter对象的小部件,该对象定义什么是可接受的和不可接受的。可以配置(通过Formatter.setAllowsInvalid(false))永远不要让用户键入无效字符串。

因此,任意正则表达式的格式化程序可能如下所示:

public class RegExFormatter extends DefaultFormatter {
        protected Matcher matcher;
        public RegExFormatter(String regex) {
        setOverwriteMode(false);
        Pattern p = Pattern.compile(regex);
        matcher = p.matcher(""); // initial field contents
    }

    @Override
    public Object stringToValue(String string) throws ParseException {
        if (string == null || string.trim().equals(""))
            return null;
        matcher.reset(string);

        if (!matcher.matches()) {
            throw new ParseException("Input did not match regex", 0);
        }

        return super.stringToValue(string);  // default returns this string; see docs!
    }

}

然后你在代码中使用它:

    String regex = "^[1-9]*[0-9](\\.\\d*)?$";  // change this to taste!
    RegExFormatter ref = new RegExFormatter(regex);
    ref.setAllowsInvalid(false);
    JFormattedTextField field1 = new JFormattedTextField(ref);