簡體   English   中英

NumberFormat解析不夠嚴格

[英]NumberFormat parse not strict enough

我有一個帶有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)將會引發異常,如果將其解析或可以使用Double.parseDouble(value)

實際上, Number只是Double的超類,因此您可以使用Double.parseDouble(...) ,然后自動拆箱就可以完成其余工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM