Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java上使用Observable设置文本字段的格式_Java_Android - Fatal编程技术网

如何在Java上使用Observable设置文本字段的格式

如何在Java上使用Observable设置文本字段的格式,java,android,Java,Android,除了Android和EditText返回的observable之外,我一直在寻找一种方法来实现这里描述的功能。下面的非正则表达式几乎可以让我到达需要的地方,除非当我试图掉到中间时。p> private String formatCpfAndPosition(String cpf) { int selectionStart = maskEditText.getSelectionStart(); String formatted = cpf; if (inputCPFVali

除了Android和EditText返回的observable之外,我一直在寻找一种方法来实现这里描述的功能。下面的非正则表达式几乎可以让我到达需要的地方,除非当我试图掉到中间时。p>
private String formatCpfAndPosition(String cpf) {
    int selectionStart = maskEditText.getSelectionStart();
    String formatted = cpf;
    if (inputCPFValidationListener != null) {
      int length = cpf.length();

      if ((length == 3 || length == 7 || length == 11)) {
        if (isDeleted(cpf)) {
          formatted = cpf.substring(0, length - 1);
          selectionStart -= 1;
        } else if (isLengthened(cpf)) {
          selectionStart += 1;
          if (length == 11) {
            formatted = formatted + "-";
          } else {
            formatted = formatted + ".";
          }
        }
      }
      lastCpf = formatted;
      maskEditText.setText(formatted);
      maskEditText.setSelection(selectionStart, selectionStart);
    }
    return formatted;
  }

我喜欢使用正则表达式提供的优雅,但我不知道该如何使用它。使用
cpf.replaceAll(“(\\d{3})(\\d{3})(\\d{3})(\\d{3})(\\d{2})”,“$1.$2.$3-$4”)
仅当
cpf
的长度达到11位标记时有效。虽然我的具体案例是针对Android的,但我相信这可以适用于整个Java

为什么不使用链接到的答案中的正则表达式?它适用于4位以上的数字。@Oleg不幸的是,当我在那里使用正则表达式时,我得到的是
1.2.3-4
,而不是
123.4
,后者是首选格式。您期望的输入和期望的输出是什么?期望的输入和输出的示例有:
123
->
123。
1234
->
123.4
123456
1234567801
->
123.456.789-01
您不也需要转换吗
123.45.7
123.457
例如(如果删除了6)?