栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

无法在DocumentFilter中为JTextField使用正则表达式

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

无法在DocumentFilter中为JTextField使用正则表达式

“我不知道是为什么正则表达式[^ 0-9]只能成功地允许数字”

str
传递到您的覆盖方法(在打字方面)是只有一个字符,作为过滤方法被调用每次你在一个字符输入时间。正则表达式
[^0-9]
不是数字。因此,当您执行时
str.replaceAll("[^0-9.]","")
,您将向过滤器授予将字符插入文本字段的权限,只要该字符是数字,否则它将添加一个空字符/字符串,从而使用户无法输入字母。

话虽如此,至于真正的问题

“过滤器的作用是确保输入限制的长度只能为4个字符,并且只能允许数字。可以使用或可以不使用十进制,但只能输入一次,一旦输入十进制,则只能输入再加上一个数字。意味着应该接受9.5或10.5,而不能接受8.45。”

如上所述,

str
传递给方法的字符是单个字符,因此,如果您尝试将完整的正则表达式传递给,
str.replaceAll()
以匹配say
8.9
,那么它将不起作用。中的正则表达式
replaceAll()
仅用于检查单个字符(在这种情况下)。

相反,您可以做的是从文档中获取文本,将串联

str
到文档中,然后查看总文本是否
matches()
为完整的正则表达式。就像是

public void replace(FilterBypass fb, int offs, int length, String str, AttributeSet a)        throws BadLocationException {    String text = fb.getdocument().getText(0, fb.getdocument().getLength());    text += str;    if ((fb.getdocument().getLength() + str.length() - length) <= maxCharacters && text.matches("^[0-9]+[.]?[0-9]{0,1}$")) {        super.replace(fb, offs, length, str, a);    } else {        Toolkit.getDefaultToolkit().beep();    }}

不确定这是否是您要查找的正则表达式。正则表达式不是我的强项。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/454108.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号