将字符串转换为借记卡格式

时间:2015-04-03 11:04:04

标签: c# string-formatting

我有一个像这样的字符串

"6s49fw7eq7ews5th"

我正在尝试将其格式化为

XXXX-XXXX-XXXX-XXXX

如何使用string.Format

执行此操作

5 个答案:

答案 0 :(得分:5)

另一种LINQ方法。我使用Enumerable.Range来减少重复的代码和幻数。

使用String.Join

string cardNumber = "1234567890123456";
IEnumerable<string> subStrings = Enumerable.Range(0, 4)
    .Select(n => cardNumber.Substring(n * 4, 4));

string result = String.Join("-", subStrings);
Console.WriteLine(result);

在ideone.com上运行here


使用String.Format

string cardNumber = "1234567890123456";
string[] subStrings = Enumerable.Range(0, 4)
    .Select(n => cardNumber.Substring(n * 4, 4)).ToArray();

string result = String.Format("{0}-{1}-{2}-{3}", subStrings);
Console.WriteLine(result);

在ideone.com上运行here

答案 1 :(得分:1)

这是一个简单的解决方案。

string t = "6s49fw7eq7ews5th";
string td = t.Substring(0, 4) + "-" + t.Substring(4, 4) + "-" + 
            t.Substring(8, 4) + "-" + t.Substring(12, 4);

或插入

string td = t.Insert(4, "-").Insert(9, "-").Insert(14, "-");

或使用split / join

string td = String.Join("-",Enumerable.Range(0, (int)(t.Length / 4d))
                        .Select(i => t.Substring(i * 4, 4)));

答案 2 :(得分:0)

以下是我在最后测试的解决方案:

string code = "1234567891011121";
Console.WriteLine(string.Format("{0}-{1}-{2}-{3}", code.Substring(0, 4), code.Substring(4, 4), code.Substring(8, 4), code.Substring(12, 4)));
Console.ReadKey();

答案 3 :(得分:0)

您可以使用MoreLINQ方法使用Batch;

string s = "6s49fw7eq7ews5th";
var list = s.Batch(4, seq => new string(seq.ToArray()));
Console.WriteLine(string.Join("-", list));

打印

6s49-fw7e-q7ew-s5th

答案 4 :(得分:0)

您可以String.Join使用Enumerable.Select重载:

string str = "6s49fw7eq7ews5th";
string newStr = String.Join("", str.Select((c, i) => i != 0 && i % 4 == 0 ? "-" + c.ToString() : c.ToString()));

Console.WriteLine(newStr); // 6s49-fw7e-q7ew-s5th