2010-03-11 17 views
7

Ich habe Zeichenfolge von 9 Buchstaben.C# string manipulation

string myString = "123987898"; 

Ich möchte die ersten 3 Buchstaben „123“ dann 2 weitere Buchstaben „98“ und dann vier weitere Buchstaben „7898“ abgerufen werden.

Welche C# -String-Funktion unterstützt diese Funktionalität.

+0

Scheint, wie Hausaufgaben? – Kerido

+0

@Kerido - es wird wahrscheinlich für die Trennung von Teilen einer Sozialversicherungsnummer benötigt, was nicht unbedingt Hausaufgaben bedeutet :) –

+0

Immer noch klingt wie Hausaufgaben. Keine schlechte Sache, obwohl. Einfach als solches markieren. –

Antwort

19

können Sie Substring verwenden:

myString.Substring(0,3) 
myString.Substring(3,2) 
myString.Substring(5,4) 

Es ist auch möglich machen es komplizierter als nötig durch eine Kombination von regulären Ausdrücken und LINQ mit:

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 für den ersten Teil. Ich mag es einfach zu halten. Der zweite Teil ist ein klarer Beweis für das Konzept, aber ich würde es umgestalten, wenn ich es im Produktionscode sah. –

0

Die beste und robuste Art und Weise des Umgangs mit diesem zu verwenden ist ein Regex

Dann können Sie a CCESS sie durch die Groups Eigenschaft des Match Instanz

 
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

Es gibt nichts gebaut, aber es ist leicht genug, um sich selbst zu machen.

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; 
    } 
} 

Beispiel Verwendung

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