2016-02-03 36 views
1

我有來過像這樣一個16字符的字符串:轉換卡號XXXX-XXXX-XXXX-0000格式

1234567891234567 

我需要能夠進行格式化,因爲它會出現在一個字符串系統即

XXXX-XXXX-XXXX-4567 

上面所示的4567個數字有關的卡號的最後四位數字。

This問題有助於格式像1234-5678-9123-4567

的字符串的東西,但是它不具有上述要求的格式幫助。

雖然尋找答案我也遇到了以下解決方案:

string[] subStrings = Enumerable.Range(0, 4).Select(n => cardNumber.Substring(n * 4, 4)).ToArray(); 
    string result = String.Format("{0}-{1}-{2}-{3}", subStrings); 

但同樣,這隻會輸出字符串作爲像1234-5678-9123-4567

我似乎已經達到了解決方案的一部分,但其餘格式不能格式化。

+1

我不明白。在你的例子中,它應該顯示爲「XXXX-XXXX-XXXX-4567」? – Equalsk

+0

@Equalsk嗨,我剛剛更新了這個問題,使這個更清晰。 –

回答

6

如果字符串的信用卡號碼將永遠是16位,那麼你可以這樣做:

string str = "1234567891234567";  
string output = "XXXX-XXXX-XXXX-" + str.Substring(str.Length - 4); 
+1

很好的答案,它只涉及一行代碼,非常高效。 –

2

您可以重新分配數組值。

subStrings[0] = subStrings[1] = subStrings[2] = "XXXX" 
1

保持你的原代碼,你可以只是做:

string[] subStrings = Enumerable.Range(0, 4).Select(n => cardNumber.Substring(n * 4, 4)).ToArray(); 
string result = String.Format("XXXX-XXXX-XXXX-{0}", subStrings[3]); 
0

你可以從你的字符串中創建一個char [],然後你可以將char []分組爲char [4],然後你可以簡單地將你的char [4]加入虛線。你可以嘗試下面的代碼;

using System; 
using System.Linq; 
using System.Collections.Generic; 

public class Program 
{ 
    public static void Main() 
    { 
     string source = "1234567891234567"; 
     int chunkSize = 4; 

     List<string> chunks = (from i in source.ToCharArray().Select((value, index) => new { Value = value, Index = index }) 
            group i.Value by i.Index/chunkSize into g 
            select g).Select(x => string.Join("",x)).ToList(); 


     Console.WriteLine(string.Join("-",chunks)); 
     Console.WriteLine("XXXX-XXXX-XXXX-"+chunks.Last()); 
     Console.WriteLine(chunks.First()+"-XXXX-XXXX-"+chunks.Last()); 
    } 
} 

希望這會有所幫助。 PS:你可以選擇你的塊的任何第n個索引來掩蓋或顯示。