2016-03-25 8 views
1
hinzu.

Betrachten Sie, dass ich eine Zeichenfolge mit so vielen durch Pipe getrennten Daten habe.Fügen Sie ein neues Zeilenzeichen beim n-ten Vorkommen eines Sonderzeichens in C#

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" 

ich diese Zeichenfolge, gibt es zu viel neue Zeile Zeichen (\ n), aber ich möchte \ n nur vor jedem sechsten Auftreten Pipe (|)

So sollte das Ergebnis sein

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" 

ich auf C# arbeite .. in einer Konsolenanwendung Kann jemand mir bitte helfen

+0

ich die question..I geändert haben müssen \ n vor jedem sechsten Auftreten von | Zeichen ans auch ich muss andere \ n Zeichen auch entfernen, die in der Mitte des Textes sind. bitte Hilfe –

+0

Das ist wirklich grundlegende Sachen obwohl ... haben Sie keine Ausbildung in C# überhaupt gehabt? Bestimmte Zeichen aus einer Zeichenkette herauszuziehen, ist nur am Ersetzen() – Nyerguds

Antwort

2

können Sie versuchen, mit 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); 
+0

Vielen Dank..das funktioniert für mich –

+0

@Keren Caelen: Gern geschehen. –

0
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, '|'); 

Das sollte funktionieren (wenn es kompiliert, es codierte direkt in der Antwort)

+0

Dieses fügt die erste nach dem siebten Bit zwar hinzu, nicht wahr? Sollte sein 'if ((i + 1)% 6 == 0) '. – Nyerguds

0

Ihre beste Wette ist wahrscheinlich die string.split() Methode zu verwenden, um dies in eine array von substrings zu ändern, und dann ein Stringbuilder und ein counter Variable aufteilen die Saiten.

Ich werde den Code dafür mit Ihrer Zeichenfolge schreiben.

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(); 
+0

Sie sollten 'foreach' nicht verwenden, wenn Sie einen Counter benötigen. Verwenden Sie einfach "for" und verwenden Sie den Zähler dieses. – Nyerguds

+0

Danke für die Rückmeldung! Ich denke nur foreach ist viel besser lesbar für die Beantwortung der Frage mit. – Needham

Verwandte Themen