NumberFormat解析不够严格

我有一个带有Locale.US的NumberFormatJFormattedTextField 。 因此小数点分隔符是点,分组分隔符是逗号。

现在我在此文本字段中键入字符串“1,23”并将焦点移动到另一个组件。 我希望字符串消失(就像我输入“a”而不是“1,23”时那样),因为在使用Locale.US时它显然不是数字的有效表示。 但是,文本字段中的文本将更改为“123”。

这是因为在解析时使用的NumberFormat并不严格,只是忽略逗号。

问题 :在这种情况下,如何告诉NumberFormat抛出ParseException ,以便在将焦点移动到另一个组件后文本字段为空?

测试代码:

 JDialog dialog = new JDialog(); JPanel panel = new JPanel(new BorderLayout()); dialog.getContentPane().add(panel); NumberFormat nf = NumberFormat.getInstance(Locale.US); JFormattedTextField textField = new JFormattedTextField(nf); textField.setText("1,23"); panel.add(textField, BorderLayout.CENTER); panel.add(new JButton("focus"), BorderLayout.EAST); dialog.pack(); dialog.setVisible(true); 

将焦点从文本字段移动到按钮,文本将更改为“123”。

我建议你使用正则表达式并使用匹配函数:

 matches("\\d+([.,])?") 

此外,如果您将使用Integer.parseInt(String)将抛出exception,如果它将被解析或您可以使用Double.parseDouble(value)

实际上, Number只是Double的超类,所以你可以使用Double.parseDouble(...)然后自动拆箱应该完成其余的工作。