当前位置: 首页 > 面试题库 >

JTextArea仅包含数字,但允许使用负值

隆礼骞
2023-03-14
问题内容

我有一个JTextArea,它只需要接受数字。这是我的代码:

DocumentFilter onlyNumberFilter = new AxisJTextFilter();
    final JTextArea areaTextoXMin = new JTextArea(String.valueOf(xMin));
    ((AbstractDocument)areaTextoXMin.getDocument()).setDocumentFilter(onlyNumberFilter);

对正数有效,但对负数无效。我该如何解决?

编辑:抱歉,在Internet上找到了AxisJTextFilter,而我忘记了这一点。它的代码是:

import javax.swing.text.*;
import java.util.regex.*;

public class AxisJTextFilter extends DocumentFilter
{
    public void insertString(DocumentFilter.FilterBypass fb, int offset, String text, AttributeSet attr) throws BadLocationException
    {
        StringBuilder sb = new StringBuilder();
        sb.append(fb.getDocument().getText(0, fb.getDocument().getLength()));
        sb.insert(offset, text);
        if(!containsOnlyNumbers(sb.toString())) return;
        fb.insertString(offset, text, attr);
    }
    public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attr) throws BadLocationException
    {
        StringBuilder sb = new StringBuilder();
        sb.append(fb.getDocument().getText(0, fb.getDocument().getLength()));
        sb.replace(offset, offset + length, text);
        if(!containsOnlyNumbers(sb.toString())) return;
        fb.replace(offset, length, text, attr);
    }
    public boolean containsOnlyNumbers(String text)
    {
        Pattern pattern = Pattern.compile("\\d*(\\.\\d{0,3})?");
        Matcher matcher = pattern.matcher(text);
        boolean isMatch = matcher.matches();
        return isMatch;
    }
}

问题答案:

尝试修改正则表达式(int验证方法containsOnlyNumbers)。

Pattern pattern = Pattern.compile("^[\\-\\+]?\\d+(\\.\\d+)?$");

这将接受以下数字:

  • 1234
  • -1234
  • +1234
  • 1234.1234

希望对您有所帮助

乌迪



 类似资料:
  • 我一直在捕捉非数字时遇到问题。 我试过了,但抓不住。如果我让它捕获非数字,但不让用户再次尝试输入。。。它完全停止了我的代码。 这是我的密码:

  • 问题内容: 我在这里的研究中得到了不同的答案。 有人可以验证Redis服务器只能存储任何数值的表示吗? 例如,如果我在lpush中使用具有双重类型的Java客户端(Jedis),在发送给Redis之前是否需要将其转换为等效于字符串类型的内容? 还是有一种方法可以发送诸如double之类的实际数字类型?如果是这样,是否有任何示例代码说明了如何实现此目的? 谢谢 问题答案: Redis将所有内容存储在

  • 我需要一个javascript正则表达式来验证电话号码。数字不能是单个零或仅为零。 e. g. 这些是不允许的。 但这些是允许的: 到目前为止,我拥有的javascript正则表达式是: 但这似乎不起作用。 规则是电话号码可以包含数字和和和。它可以以0开头,但电话号码不能是单个0或仅包含或不包含上述字符的多个零。 你能给我指一下正确的方向吗。提前谢谢。

  • 问题内容: 我需要找到一个仅允许字母数字的reg ex。到目前为止,我尝试的每个人都只能在字符串是字母数字的情况下工作,这意味着同时包含字母和数字。我只想要一个允许任何一个但不需要两个都允许的东西。 问题答案: /^[a-z0-9]+$/i 更新(支持通用字符) 如果您需要此正则表达式支持通用字符,则可以找到unicode字符列表。 例如:

  • 我想使用regex检查一个字符串验证,例如,它应该包含和的小写aphanumberic,但不仅仅包含和 这是我的尝试 但我想说明,当或仅单独运行时不应允许

  • 我想做一个计算器程序,我只允许输入数字,但我不知道怎么做,你能告诉我怎么做吗。我在别处什么也没找到。以下是我的源代码: