有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何限制EditText输入只允许3位数字(整数或小数)

正如标题所说,我在活动中设置了一个EditText,希望将输入限制为仅数字。然而,它是十进制数还是整数并不重要。我确实要求数字限制为3。例如,“123”、“1.23”、“12.3”的输入都是合法输入

“1234”,“123.”。123'都是非法输入

我试着建立

安卓:inputType = "numberDecimal"

在xml文件中

并将最大长度设置为4

编辑:

我还尝试了以下代码:

InputFilter filter = new InputFilter() {

    //^\-?(\d{0,5}|\d{0,5}\.\d{0,3})$
    //^\-?(\d{0,3}|\d{0,2}\.\d{0,1}|\d{0,1}\.\d{0,2})$
    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        if (end > start) {
            // adding: filter
            // build the resulting text
            String destinationString = dest.toString();
            String resultingTxt = destinationString.substring(0, dstart) + source.subSequence(start, end) + destinationString.substring(dend);
            // return null to accept the input or empty to reject it
            return resultingTxt.matches("^\\-?(\\d{0,3}|\\d{0,2}\\.\\d{0,1}|\\d{0,1}\\.\\d{0,2})$") ? null : "";
        }

        return null;
    }
};

我确实根据@Suman Dash提到的示例代码修改了正则表达式。 我对正则表达式的理解

^\-?(\d{0,3}|\d{0,2}\.\d{0,1}|\d{0,1}\.\d{0,2})$

允许特定的数字输入模式,如#.###,##.#和###。 当我测试代码时,模式#.#和###工作正常,但模式####也允许像“##”这样的输入,例如“.88”作为合法输入。它把小数点当作一个合法的数字,所以我只能输入“.88”,而不是“.123”。不管怎样,我不想要任何以小数点开始的数字。 我怎样才能消除这种情况? 实现这一目标的最佳方式是什么?谢谢


共 (1) 个答案

  1. # 1 楼答案

    InputFilter filter = new InputFilter() {
        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            for (int i = start; i < end; ++i)
            {
                if (!Pattern.compile("[1234567890\.]*").matcher(String.valueOf(source.charAt(i))).matches())
                {
                    return "";
                }
            }
            return null;
        }
    };
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EditText ntxt =(EditText)findViewById(R.id.numberEditTextbox) ;
        ntxt.setFilters(new InputFilter[]{filter,new InputFilter.LengthFilter(4)});
    
    }
    

    此代码可能对您有所帮助