regex 如何将小数点限制为每个数字只有一个+

jm81lzqq  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(116)

我在java/android studio中编写了一个计算器,遇到了每个数字只需要一个小数点的问题。比如1.2而不是1.2.3。允许用户在计算器中使用小数或自然数,但是,一旦用户按下点(“.”)符号,就不能对该特定数字重复此操作。
我编码它来显示错误(这不起作用),而不是显示错误,用户不应该能够添加另一个小数点后的第一个数字。它需要为1.1 + 1.1工作,但不为1.1.1。或1.1。等
我试着把它作为代码的一部分,但它不起作用。就像,它一直禁用我的等于按钮,即使我已经写了它的第一个警告后。

Pattern p;

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);

   p = Pattern.compile("(\\d*(\\.\\d*)?([+\\-*%\\]|$))*");

   UserInput = findViewById(R.id.ed_calculation_input);
   UserInput.setShowSoftInputOnFocus(false);
   tvCalculationOutput = findViewById(R.id.tv_calculation_output);

   edUserInput.addTextChangedListener(new TextWatcher() {
       @Override
       public void beforeTextChanged(CharSequence s, int start, int count, int after) {

       }

       @Override
       public void onTextChanged(CharSequence s, int start, int before, int count) {
           Matcher m = p.matcher(edUserInput.getText().toString());
           if(!m.matches()) {
               edUserInput.setError("Enter valid no");
               btnEqual.setEnabled(false);
           } else {
               btnEqual.setEnabled(true);
           }
       }

       @Override
       public void afterTextChanged(Editable s) {

       }
   });

字符串

6psbrbz9

6psbrbz91#

这个问题的解决方案相当简单。您已经选择了EditText作为数字的输入,对吗?然后您所要做的就是添加这一行

<EditText
    ...
    android:inputType="numberDecimal"
    ...
    />

字符串
在xml布局文件中,防止数字具有多个小数点(或字母或其他符号)。

相关问题