如何格式化Java中的信用卡号

Dir*_*kel 1 java string-formatting

我想通过将用空格分隔的数字分组来格式化信用卡号

例如,5112345112345114格式为:5112 3451 1234 5114.

我想指定一个蒙版并将数字渲染到其中.例如:"#### #### #### ####"表示16位信用卡号码.对于Amex(15位)它应该如下所示:"#### ###### #####".如果该号码尚未完全可用(由持卡人输入),则应从左侧开始进入掩码.

是否有Java库或甚至API来执行此操作?我查看了java.text.MessageFormat,但找不到拆分字符串的方法.似乎.net有一个API:String.Format("{0:0000 0000 0000 0000}",数字).

Fil*_*mat 6

按 4 个符号对字符串进行分组

public static String formatCard(String cardNumber) {
    if (cardNumber == null) return null;
    char delimiter = ' ';
    return cardNumber.replaceAll(".{4}(?!$)", "$0" + delimiter);
}
Run Code Online (Sandbox Code Playgroud)

正则表达式的意思是:每 4 个符号(如果不是行尾)

?!是一个否定的先行断言 - 如果在 4 个符号之后没有行尾,则为真。

测试:

in:  1234567890123456
out: 1234 5678 9012 3456
in:  12345678901234
out: 1234 5678 9012 34
Run Code Online (Sandbox Code Playgroud)


Dmi*_*nov 5

您可以检查卡号的长度并应用适当的正则表达式.例如:

    cardNumber.replaceAll("\\d{4}", "$0 ");
    cardNumber.replaceFirst("\\d{4}", "$0 ").replaceFirst("\\d{6}", "$0 ");
Run Code Online (Sandbox Code Playgroud)