3

I have a string like this

"6s49fw7eq7ews5th"

I am trying to format it like this

XXXX-XXXX-XXXX-XXXX

How do I do this with string.Format ?

Shashank Shekhar
  • 3,958
  • 2
  • 40
  • 52
  • 2
    I feel like [this](http://stackoverflow.com/questions/9932096/add-separator-to-string-at-every-n-characters) post might be helpfull to you. It doesn't use `String.Format` but instead it uses `String.Insert`. – maam27 Apr 03 '15 at 11:13
  • Thanks . helpfull this post . i learn how do this. – Majid Sabzalian Apr 04 '15 at 02:58

5 Answers5

5

Another LINQ method. I use Enumerable.Range to minimise repeated code and magic numbers.

Using 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);

Run it here on ideone.com.


Using 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);

Run it here on ideone.com.

Wai Ha Lee
  • 8,598
  • 83
  • 57
  • 92
1

here is a simple solution.

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

or with insert

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

or with split/join

string td = String.Join("-",Enumerable.Range(0, (int)(t.Length / 4d))
                        .Select(i => t.Substring(i * 4, 4)));
Thomas Andreè Wang
  • 3,379
  • 6
  • 37
  • 53
0

Here is your solution which is tested at my end:

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();
Soner Gönül
  • 97,193
  • 102
  • 206
  • 364
Priyank Sheth
  • 2,352
  • 19
  • 32
0

You can use MoreLINQ with Batch method like;

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

Prints

6s49-fw7e-q7ew-s5th
Soner Gönül
  • 97,193
  • 102
  • 206
  • 364
0

You can use String.Join with Enumerable.Select overload:

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
w.b
  • 11,026
  • 5
  • 30
  • 49