正则表达式在给定位置添加空间

时间:2018-06-02 17:18:53

标签: java android regex android-edittext credit-card

我希望使用相同的处理程序(JAVA-Android)格式化AMEX和ViSA卡

对于Visa我想看起来像“1234 1234 1234 1234”

我正在使用:

String initial = s.toString();
// remove all non-digits characters
String processed = initial.replaceAll("\\D", "");
// insert a space after all groups of 4 digits that are followed by another digit
processed = processed.replaceFirst("(\\d{4})(?=\\d)", "$1 ");
// to avoid stackoverflow errors, check that the processed is different from what's already
//  there before setting
if (!initial.equals(processed)) {
   // set the value
   s.replace(0, initial.length(), processed);
}

我的问题是:

鉴于我有一个需要替换为“”的位置数组(例如[4,9,14]),我如何使用REGEX或任何其他方法格式化它,以允许删除,粘贴等内容。

1 个答案:

答案 0 :(得分:1)

您只需使用for循环插入4位数间隔的字符。

平衡间隔,保持gap变量并在每次迭代期间增加它以保持空间的平衡位置,考虑到之前添加的空格所以使用

String initial = s.toString();
// remove all non-digits characters
    String processed = initial.replaceAll("\\D", "");
    StringBuilder sb = new StringBuilder(processed);
    System.out.println(sb);
    int gap = 0;
    for (int i = 4; i< sb.length()-1;i+=4){
        sb.insert(i + gap,' ');
        gap++;
    }

Demo Link

要处理这两种情况,请can use this demo