将字符串转换为借记卡格式
Convert string to debit card format
我有这样的字符串
"6s49fw7eq7ews5th"
我正在尝试这样格式化
XXXX-XXXX-XXXX-XXXX
如何使用 string.Format
执行此操作?
这是一个简单的解决方案。
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)));
这是我测试过的解决方案:
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();
您可以使用 MoreLINQ
with Batch
方法,例如;
string s = "6s49fw7eq7ews5th";
var list = s.Batch(4, seq => new string(seq.ToArray()));
Console.WriteLine(string.Join("-", list));
版画
6s49-fw7e-q7ew-s5th
您可以将 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
另一种 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);
运行 它 here 在 ideone.com.
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);
运行 它 here 在 ideone.com。
我有这样的字符串
"6s49fw7eq7ews5th"
我正在尝试这样格式化
XXXX-XXXX-XXXX-XXXX
如何使用 string.Format
执行此操作?
这是一个简单的解决方案。
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)));
这是我测试过的解决方案:
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();
您可以使用 MoreLINQ
with Batch
方法,例如;
string s = "6s49fw7eq7ews5th";
var list = s.Batch(4, seq => new string(seq.ToArray()));
Console.WriteLine(string.Join("-", list));
版画
6s49-fw7e-q7ew-s5th
您可以将 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
另一种 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);
运行 它 here 在 ideone.com.
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);
运行 它 here 在 ideone.com。