2011-10-14 14 views
6

Farzedelim ki şu metni içeren bir dizim var: "BU BİR TESTDİR". Her n karakterini nasıl bölerim? Yani eğer n 10 olsaydı, o zaman o zaman:C# satırı her n karaktere bölünür

. Bunun nedeni, çok büyük bir çizgiyi daha küçük satırlara ayırmak istiyorum. Bunun için string.Split() kullanabileceğimi düşünüyorum, ama nasıl ve kafam karıştığına dair hiçbir fikrim yok.

Herhangi bir yardım için teşekkür ederiz.

+1

olası yinelenen kullanmadan aynı yapmanın başka bir yol olduğunu /stackoverflow.com/questions/1450774/c-sharp-split-a-string-into-equal-chunks-each-of-size-4) –

cevap

16


kod inceleme my answer bir uygulama ödünç ver İşte bir örnek.

public static string SpliceText(string text, int lineLength) { 
    return Regex.Replace(text, "(.{" + lineLength + "})", "$1" + Environment.NewLine); 
} 

Düzenleme:: regex olmadan Muhtemelen

public static string[] SpliceText(string text, int lineLength) { 
    return Regex.Matches(text, ".{1," + lineLength + "}").Cast<Match>().Select(m => m.Value).ToArray(); 
} 
2

Bunun için bir düzenli ifade kullanabilmeniz gerekir.

//in this case n = 10 - adjust as needed 
List<string> groups = (from Match m in Regex.Matches(str, ".{1,10}") 
         select m.Value).ToList(); 

string newString = String.Join(Environment.NewLine, lst.ToArray()); 

detaylar için bu soruya bakın: Splitting a string into chunks of a certain size

1

değil en iyi yol, ancak:
bir yerine dizeler dizisi dönmek için

Bu bir çizgi her n karakterleri kırmak ekler
string test = "my awesome line of text which will be split every n characters"; 
int nInterval = 10; 
string res = String.Concat(test.Select((c, i) => i > 0 && (i % nInterval) == 0 ? c.ToString() + Environment.NewLine : c.ToString())); 
+0

Birleşim yerine 'String.Concat()' kullanmak daha iyidir boş bir dize. –

+0

bahşiş için teşekkürler! – Peter

3

Belki de bu aşırı büyük dosyaları verimli bir şekilde işlemek için kullanılabilir:

public IEnumerable<string> GetChunks(this string sourceString, int chunkLength) 
{ 
    using(var sr = new StringReader(sourceString)) 
    { 
     var buffer = new char[chunkLength]; 
     int read; 
     while((read= sr.Read(buffer, 0, chunkLength)) == chunkLength) 
     { 
      yield return new string(buffer, 0, read); 
     }   
    } 
} 

Aslında, bu herhangi bir TextReader için çalışır. StreamReader, en sık kullanılan TextReader'dur. Tüm dosyayı yüklemeye gerek kalmadan çok geniş metin dosyalarını (IIS Günlük dosyaları, SharePoint Günlük dosyaları, vb.) Işleyebilir, ancak satır satırını okuyabilirsiniz. /: Bir kod inceleme yaptıktan sonra buna geri geliyor

1

, [boyutunda 4'ün her eşit parçalara ayırarak C#, Split bir dize] (http Regex

public static IEnumerable<string> SplitText(string text, int length) 
{ 
    for (int i = 0; i < text.Length; i += length) 
    { 
     yield return text.Substring(i, Math.Min(length, text.Length - i)); 
    } 
} 
İlgili konular