gpt4 book ai didi

java - 除浮点值外的所有内容的正则表达式

转载 作者:行者123 更新时间:2023-11-29 07:53:54 24 4
gpt4 key购买 nike

我正在为 JTextField 编写自定义 DocumentFilter,这样它只允许用户输入浮点值。这意味着:

  • 0 到 9 个字符
  • 一个“.”性格
  • 也可以在开头输入'-'和'+'

我只为除整数以外的所有内容编写了一个,我的正则表达式只是 \D+。但现在事情变得更复杂了。

我认为具有此特征的 float 的表达式是 [-+]?(\d*[.])?\d+,但只使用 \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);
}
}

有什么帮助吗?

最佳答案

回答

首先找到字符串中的所有 float ,然后从找到的最后一个 float 开始将它们全部删除。您从字符串的末尾开始并从头开始工作的原因是因为这会阻止字符串更改的问题,从而阻止索引和长度成为问题。

所以使用下面的 RegEx 来查找所有 floats 然后简单地使用 string.remove 和它们的索引从最后找到的到第一个。

享受


正则表达式 DEMO

^[-+]?[0-9]*\.?[0-9]+$

Regular expression visualization

Debuggex Demo


描述

/^[-+]?[0-9]*\.?[0-9]+$/gi
^ Start of string
Char class [-+] 0 to 1 times [greedy] matches:
-+ One of the following characters -+
Char class [0-9] 0 to infinite times [greedy] matches:
0-9 A character range between Literal 0 and Literal 9 \. 0 to 1 times [greedy] Literal .
Char class [0-9] 1 to infinite times [greedy] matches:
0-9 A character range between Literal 0 and Literal 9
$ End of string

替代正则表达式

^[-+]?([0-9]+\.?[0-9]*|[0-9]*\.?[0-9]+)$

此正则表达式将匹配末尾带有 . 且没有任何其他数字的数字。

示例

+1.
-2.
2.
6.3
2323356.342478986756
.5

关于java - 除浮点值外的所有内容的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19277484/

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