gpt4 book ai didi

java - 如何使用 Regex 和 DocumentFilter 限制点后超过两位数字?

转载 作者:行者123 更新时间:2023-11-30 03:03:30 24 4
gpt4 key购买 nike

我正在尝试制作一些 JTextFields 来仅验证货币($xxx.xx)等双数,我使用 DocumentFilter 编写了一个类验证模式和字符大小,但我无法实现的是用户可以输入多个点。

这是我的代码示例:

private class LimitCharactersFilter extends DocumentFilter {

private int limit;
private Pattern regex = Pattern.compile( "\\d*(\\.\\d{0,2})?");
private Matcher matcher;

public LimitCharactersFilter(int limit) {
this.limit = limit;
}

@Override
public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr)
throws BadLocationException {
String fullText = fb.getDocument().getText(0, fb.getDocument().getLength()) + string;
matcher = regex.matcher(fullText);
if((fullText.length()) <= limit && matcher.matches()){
fb.insertString(offset, string, attr);
}else{
Toolkit.getDefaultToolkit().beep();
}
}

@Override
public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs)
throws BadLocationException {
String fullText = fb.getDocument().getText(0, fb.getDocument().getLength()) + text;
matcher = regex.matcher(fullText);
matcher = regex.matcher(text);
if((fullText.length()) <= limit && matcher.matches()){
fb.replace(offset,length, text, attrs);
}else{
Toolkit.getDefaultToolkit().beep();
}
}
}

这是界面外观的图片: Interface Screenshot

验证字符限制效果很好,但如果已经有一个点,我想限制用户输入超过两位数字。

希望有人能帮我解决这个问题。

最佳答案

要允许在输入 float 时输入点,您可以使用

\\d*\\.?\\d{0,2}

注意这里,

  • \\d* - 零个或多个数字
  • \\.? - 一个或零个点
  • \\d+ - 一位或多位数字

另请考虑使用 VGR 的建议:

new JFormattedTextField(NumberFormat.getCurrencyInstance());

这将创建一个允许货币作为输入的文本字段。

关于java - 如何使用 Regex 和 DocumentFilter 限制点后超过两位数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35370300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com