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