2016-03-25 17 views
1

パイプで区切られたデータが非常に多い文字列があるとします。 Cで特殊文字のn番目の文字に改行文字を追加する

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" 

私は、あまりにも多くの改行文字(\ n)で、この文字列があるが、私はしたい\ n個のみのパイプの全ての第六発生前(|)

だから、結果がどうあるべき

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" 
私はC#のに取り組んでいます

..コンソールアプリケーション にいくつかのいずれかが私を助けることができますしてください

+0

を必要とする\ n個のすべての第六出現前|文字ansまた私はテキストの真ん中にある他の\ n文字を削除する必要があります。help help –

+0

これは本当に基本的なものですが...あなたはCで全くトレーニングをしていませんか?文字列から特定の文字を取り除くのはs.Replace()です – Nyerguds

答えて

2

あなたはLINQの使用して試すことができます:私はquestion..Iを変更した

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

ありがとうございました。私のために働いています –

+0

@ケレン・ケーレン:どうぞよろしくお願いします。 –

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

これは(それがコンパイルする場合、私は返事に直接コーディング)

+0

これは7番目のビットの後に最初の文字を追加しますか? 'if((i + 1)%6 == 0)'でなければなりません。 – Nyerguds

0

を動作するはずです、あなたの最善の策は、substringsarrayにこれを変更するstring.split()メソッドを使用することはおそらくあり、その後、分割するStringbuildercounter変数を使用します弦。

私はあなたの文字列を使用して、このコードを以下に記述します。

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

とにかくカウンタが必要な場合は、 'foreach'を使用しないでください。 'for'を使い、そのカウンターを使用してください。 – Nyerguds

+0

フィードバックいただきありがとうございます!私はちょうどforeachが質問に答えるためにはるかに読みやすいと思う。 – Needham