2010-03-11 30 views
7

9 harflik bir dizim var.C# dize işleme

string myString = "123987898"; 

ben ilk 3 harf "123" almak isteyen sonra 2 daha harfleri "98" ve ardından 4 harfleri "7898".

Bu C# string işlevi bu işlevi desteklemektedir.

+0

ödev gibi görünüyor? – Kerido

+0

@Kerido - bir sosyal güvenlik numarasının parçalarını ayırmak için büyük olasılıkla gereklidir, bu mutlaka ev ödevi demek değildir :) –

+0

Hala ödev gibi geliyor. Yine de kötü bir şey değil. Sadece böyle etiketle. İlk parça için –

cevap

19

Sen Substring kullanabilirsiniz:

Ayrıca mümkündür
myString.Substring(0,3) 
myString.Substring(3,2) 
myString.Substring(5,4) 

gerekli olandan daha karmaşık hale getirmek için düzenli ifadeler ve LINQ bir arada kullanarak:

string myString = "123987898"; 
Regex regex = new Regex("(.{3})(.{2})(.{4})"); 
string[] bits = regex 
    .Match(myString) 
    .Groups 
    .Cast<Group>() 
    .Skip(1) 
    .Select(match => match.Value) 
    .ToArray(); 
+0

+1. Basit tutmayı severim. İkinci kısım, kavramın düzgün bir kanıtıdır, ancak üretim kodunda gördüğümde bunu yeniden düzenlerdim. –

0

baş etmenin en iyi ve sağlam yolu Bununla bir regex

kullanmak mümkündür. Match Mesela

 
Match m = MyRegex.Match("123987898"); 
if (m.Success){ 
    int first3 = int.Parse(m.Groups["first3"].Value; 
    int next2 = int.Parse(m.Groups["next2"].Value; 
    int last4 = int.Parse(m.Groups["last4"].Value; 

    /* Do whatever you have to do with first3, next2 and last 4! */ 
} 
1

inşa şey yoktur ait Groups özelliği üzerinden Dışı Erişim ama kendiniz yapmak için yeterli kolaydır.

public static IEnumerable<string> SplitBySize(string value, IEnumerable<int> sizes) 
{ 
    if (value == null) throw new ArgumentNullException("value"); 
    if (sizes == null) throw new ArgumentNullException("sizes"); 

    var length = value.Length; 
    var currentIndex = 0; 
    foreach (var size in sizes) 
    { 
     var nextIndex = currentIndex + size; 
     if (nextIndex > length) 
     { 
      throw new ArgumentException("The sum of the sizes specified is larger than the length of the value specified.", "sizes"); 
     } 
     yield return value.Substring(currentIndex, size); 
     currentIndex = nextIndex; 
    } 
} 

Örnek Kullanım

foreach (var item in SplitBySize("1234567890", new[] { 2, 3, 5 })) 
{ 
    Console.WriteLine(item); 
} 
Console.ReadKey();