2013-10-19 84 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