Java Android正则表达式-如何在数字后加连字符?

Java Android正则表达式-如何在数字后加连字符?,java,android,regex,Java,Android,Regex,如何使用TextWatcher,在某些数字后面加上连字符 我有一些文本,用户可以在其中输入8位数字(可以是任何数字)。但是,我想将00000000显示为0000-0000,12345678显示为1234-5678,等等 这是我目前的代码: @Override public void afterTextChanged(Editable s) { if(editabletext.length() == 8) { editabletext.append("^(?=.*-)[a-zA-Z0

如何使用
TextWatcher
,在某些数字后面加上连字符

我有一些文本,用户可以在其中输入8位数字(可以是任何数字)。但是,我想将
00000000
显示为
0000-0000
12345678
显示为
1234-5678
,等等

这是我目前的代码:

@Override
public void afterTextChanged(Editable s) {

  if(editabletext.length() == 8) {
    editabletext.append("^(?=.*-)[a-zA-Z0-9-]+$");
  }

}

如果要在4个数字后添加连字符,然后正常显示res,可以使用以下正则表达式:

([0-9]{4})([0-9]{4})
并将其替换为:

$1-$2
正则表达式搜索8位数字,将前4位和后4位放入捕获组。第一个捕获组使用替换中的
$1
检索,第二个捕获组使用
$2
检索

在regex101.com上

不使用正则表达式,您可以只使用,如下所示:

String firstFour = editabletext.substring(0, 4);
String lastFour = editabletext.substring(4);
String newEditableText = firstFour + "-" + lastFour
可压缩为:

editabletext = editabletext.substring(0, 4) + "-" + editabletext.substring(4);
下面是您的代码的样子:

@Override
public void afterTextChanged(Editable s) {

  if(editabletext.length() == 8){
    editabletext = editabletext.substring(0, 4) + "-" + editabletext.substring(4);

    //or you could use a regex:

    editabletext = editabletext.replaceAll("([0-9]{4})([0-9]{4})", "$1-$2")
  }
}

如果逻辑检查长度正好是8,为什么不这样做:
editableText=editableText.substring(0,4)+“-”+editableText.substring(4)?我在想,我更专注于8位数。我不确定。editableText=editableTest.substring(0,4)+“-”+editableText.substring(4);--我不明白你是怎么做到的?以及原因。。对不起,我是Android新手,如果你不介意的话,请解释一下。@JibinGeorge它所做的是从原始字符串的索引0到索引4(exlusive)取一个子字符串,连接一个“-”,然后从索引4到字符串的末尾连接一个子字符串。结果是一个“-”卡在8个字符串的中间。由于您在
if
中指定了8的精确长度,因此运行代码的唯一方法是用户键入8个字符。所以这总是把角色放在中间。如何处理用户键入的内容则是另一回事。查看下面Jodmo的答案,以获得更好的图片。我可以问你,这是java方法的.substring部分吗?因为我基本上遵循了你写下的内容,但是editabletext.substring(0,4)+“-”+editabletext.substring(4);这是一个字符串的Java方法。你得到的错误是什么?editabletext是一个EditText而不是字符串,所以这就是我得到的;String firstFour=editabletext.toString().substring(0,4);String lastFour=editabletext.toString().substring(4);字符串newEditableText=firstFour+“-”+lastFour--------------------如果(editabletext.length()=8){editabletext=editabletext.substring(0,4)+“-”+editabletext.substring(4);//或者您可以使用正则表达式:editabletext=editabletext.replaceAll([0-9]{4}),“$1-$2”)}这给了我一个错误,说不兼容的类型;必需的是android.widget.EditText并已找到;字符串
@Override
public void afterTextChanged(Editable s) {

  if(editabletext.length() == 8){
    editabletext = editabletext.substring(0, 4) + "-" + editabletext.substring(4);

    //or you could use a regex:

    editabletext = editabletext.replaceAll("([0-9]{4})([0-9]{4})", "$1-$2")
  }
}