2011-11-28 17 views
5

string.format() işlevini veya belki LINQ işlevini kullanarak "ABCDEFGHIJKLMNOP" öğesini "ABCD-EFGH-IJKL-MNOP" olarak değiştirmenin bir yolu var mı?
Ben bu açıklamayıString.format() işlevi veya LINQ kullanarak dizeyi ayırmanın en iyi yolu nedir?

Out= String.Format("{0}-{1}", String.Format("{0}-{1}-{2}", In.Substring(0, 4), In.Substring(4, 4), In.Substring(8, 4)), In.Substring(12, 4)); 

Bunu gerçekleştirmek için daha iyi ve daha net bir yol yoktur kullanıyorum?

+0

Sorun dizesi daha kısa 16 karakter ise, programınız ** ölecek olmasıdır !! ** –

cevap

10

Sen olabilir kullanım string.Format, ama yine de farklı bölümlerini almak için SubString kullanması gerekir.

Muhtemelen sadece Insert kullanmalıdır:

string result = myString.Insert(12, "-").Insert(8, "-").Insert(4, "-"); 

LINQ böyle bir şey için overkill.

9

Bu LINQ veya String.Format olmadan yapmak gerçekten çok kolay, bu yüzden yerine bu kodu kullanmanızı öneririz olacaktır:

string s = "ABCDEFGHIJKLMNOP"; 
for(int i = 4; i < s.Length; i += 5){ 
    s = s.Insert(i, "-"); 
} 

Bu, her 4 karakterden (i farz sonra bir tire ekler ne istediğini). Linq Sadece eğlence için

3

:

Elbette
string result = input.Select((c, i) => i > 0 && i % 4 == 0 ? "-" + c : c.ToString()) 
       .Aggregate((s1, s2) => s1 + s2); 

, bir 'klasik' çözüm daha verimli VE daha okunabilir olurdu, bu durumda Linq kullanarak vermek değil. D

senin varyant ile
+0

Gerçekten kötü ... ve eğlenceli;:

Yine de, bu bir yazma zevk –

+0

Ha ha: D güzel 1! Ben de böyle bir şey denedim. Ama çalışmadı – Niranjan

+0

Beklendiği gibi çalışır, ama sorun (KooKiz de bu çözümü yayınladı bile biliyor), bu kod ne olduğunu bilmeyen bir kişi için okumak ve görmek ne çok zor olduğunu bilmiyorum. Neden bunun için LINQ kullanmak istediğini anlamıyorum, çünkü yeni ve parlak. Ben ** LINQ'yi seviyorum, ama ben sadece eski basit bir döngü kullanmak için daha sade ve çok daha okunaklı ve senaryoya uyan başka bir yapı olduğu yerde zorlamıyorum. –

İlgili konular