我正在为 JTextField 编写一个自定义 DocumentFilter,它只允许用户输入浮点值。这表示:
- 0 到 9 个字符
- 一种 '。' 特点
- 也可以在开头输入“-”和“+”
我只为除整数之外的所有内容编写了一个,而我的正则表达式只是\D+
. 但现在事情变得更复杂了。
我认为具有此特征的浮点数的表达式是[-+]?(\d*[.])?\d+
,但在这里使用 just\D
而\d
不是不起作用,因为我可以输入多个小数点,+/- 是不允许的...
这就是我的代码的样子:
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
public class OnlyFloatDocumentFilter extends DocumentFilter {
@Override
public void insertString(FilterBypass fb, int off, String str, AttributeSet attr) throws BadLocationException {
fb.insertString(off, str.replaceAll("[-+]?(\\D*[.])?\\D+", ""), attr);
}
@Override
public void replace(FilterBypass fb, int off, int len, String str, AttributeSet attr) throws BadLocationException {
fb.insertString(off, str.replaceAll("[-+]?(\\D*[.])?\\D+", ""), attr);
}
}
有什么帮助吗?