2013-10-19 54 views
1

信用卡号码我想通过分组用空格如何格式化的Java

例如5112345112345114分隔的数字格式化信用卡号码的格式应为:5112 3451 1234 5114

我想指定一个掩码并将其中的数字显示出来。例如:“#### #### #### ####”为16位数的信用卡号码。对于美国运通(15位数字),应该如下所示:“#### ###### #####”。如果号码还没有完全可用(因为它是由持卡人输入的),它应该从左侧开始渲染到蒙版中。

有没有一个库,甚至在Java中的API来做到这一点?我查看了java.text.MessageFormat,但找不到分割字符串的方法。看来.net有一个API:String.Format(“{0:0000 0000 0000 0000}”,数字)。

回答

3

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

cardNumber.replaceAll("\\d{4}", "$0 "); 
    cardNumber.replaceFirst("\\d{4}", "$0 ").replaceFirst("\\d{6}", "$0 "); 
+0

添加先行避免尾随空格:' “5112345112345114” .replaceAll(/ \ d {4}(= \ d)/, '$ 0'?)==“5112 3451 1234 5114“ – Love

+0

一个更通用的解决方案,用于将组中的任何字符串内容分组为4: '”5112345112345114“.replaceAll(/。{4}(?!$)/,'$ 0')==”5112 3451 1234 5114“' – Love

0

分组串由4个符号

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

正则表达式的意思是:每4个符号,如果它不是行结束

?!是一种消极的前向断言 - 这是真的,如果后4符号没有行结束。

测试:

in: 123456789
out: 1234 5678 9012 3456 
in: 123456789
out: 1234 5678 9012 34 
+0

也许关于格式化语法的更多信息会更好。 – StarShine