Keren Caelen
Keren Caelen

Reputation: 1466

Add new line character on nth occurrence of a special character in C#

Consider I have a string with so many pipe separated data.

String s="hskdhkdh|eeeee|eeeee|eeeee|eeeesds|ddd\nsdsfdfdf|dsfdfdf|dfdsf\ndsfdsf|sdfsfdsfds|cvcxvv|hkdh\nhdskdh|hdkshdkd|n\nkho|jljoas|sbkhash|bkshoshak\nhksashalsha|bkgaskgask|hkhlv|skhgdskdg|bgdsjdgsj|gklgau"

I this string, there are too much new line characters(\n) but i want \n only before every 6th occurrence of pipe(|)

So the result should be

  String s="hskdhkdh|eeeee|eeeee|eeeee|eeeesds|ddd\nsdsfdfdf|dsfdfdf|dfdsfdsfdsf|sdfsfdsfds|cvcxvv|hkdh\nhdskdh|hdkshdkd|nkho|jljoas|sbkhash|bkshoshak\nhksashalsha|bkgaskgask|hkhlv|skhgdskdg|bgdsjdgsj|gklgau"

I am working on C#..in a console application Can some one help me please

Upvotes: 1

Views: 244

Answers (3)

Dmitrii Bychenko
Dmitrii Bychenko

Reputation: 186748

You can try using Linq:

  String s =
     "hskdhkdh|eeeee|eeeee|eeeee|eeeesds|ddd\nsdsfdfdf|dsfdfdf|dfdsf\ndsfdsf|sdfsfdsfds|cvcxvv|hkdh\nhdskdh|hdkshdkd|n\nkho|jljoas|sbkhash|bkshoshak\nhksashalsha|bkgaskgask|hkhlv|skhgdskdg|bgdsjdgsj|gklgau";

  // Split by | 
  // Remove extra \n 
  // Join back by |
  String result = String.Join("|", s
    .Split('|')
    .Select((item, index) => ((index > 0) && (index % 5 == 0)) 
               ? item 
               : item.Replace("\n", "")));

  // Test:
  // hskdhkdh|eeeee|eeeee|eeeee|eeeesds|ddd
  // sdsfdfdf|dsfdfdf|dfdsfdsfdsf|sdfsfdsfds|cvcxvv|hkdh
  // hdskdh|hdkshdkd|nkho|jljoas|sbkhash|bkshoshak
  // hksashalsha|bkgaskgask|hkhlv|skhgdskdg|bgdsjdgsj|gklgau
  Console.Write(result);

Upvotes: 2

Needham
Needham

Reputation: 467

your best bet is probably to use the string.split()method to change this into an array of substrings, and then use a Stringbuilder and a counter variable to split the strings.

I will write the code for this below using your string.

 string s = "hskdhkdh | eeeee | eeeee | eeeee | eeeesds | ddd | sdsfdfdf | dsfdfd | dfdsfdsfdsf | sdfsfdsfds | cvcxvv | hkdh | hdskdh | hdkshdkd | nkho | jljoas | sbkhash | bkshoshak | hksashalsha | bkgaskgask | hkhlv | skhgdskdg | bgdsjdgsj";

        string[] substrings = s.Split('|');

        int counter = 1;

        StringBuilder sb = new StringBuilder();

        foreach (string sub in substrings)
        {
            sb.Append(sub + "|");

            if (counter % 6 == 0)
            {
                sb.Append("\n");
            }

            counter++;
        }

        s = sb.ToString();

Upvotes: 0

Pedro G. Dias
Pedro G. Dias

Reputation: 3222

var bits = s.Split('|'); // Divide into bits
for(int i = 0; i < bits.Length; i++){
  if(i % 6 == 0){
    bits[i] += "\n";
  }
}
var done = string.Join(bits, '|');

This should work (if it compiles, I coded directly in the reply)

Upvotes: 0

Related Questions