2010-12-13 20 views
4

Ich möchte eine effiziente Art und Weise zu tun zu finden:C# Pad links nach String

i eine Zeichenfolge wie haben:

'1,2,5,11,33' 

i-Pad Null wollen nur auf die Zahlen, die unter 10 (eine haben digit)

so will ich

'01,02,05,11,33' 

dank bekommen

Antwort

17

Wie viel kostet Sie wirklich kümmern sich um Effizienz? Persönlich würde ich verwenden:

string padded = string.Join(",", original.Split(',') 
             .Select(x => x.PadLeft(2, '0'))); 

(Wie in den Kommentaren darauf hingewiesen, wenn Sie 3.5 verwenden sind .NET Sie einen Anruf müssen ToArray nach dem Select.)

Das ist definitiv nicht der am effizientesten Lösung, aber es ist, was ich verwenden würde, bis ich bewiesen hätte, dass es nicht effizient genug war. Hier ist eine Alternative ...

// Make more general if you want, with parameters for the separator, length etc 
public static string PadCommaSeparated(string text) 
{ 
    StringBuilder builder = new StringBuilder(); 
    int start = 0; 
    int nextComma = text.IndexOf(','); 
    while (nextComma >= 0) 
    { 
     int itemLength = nextComma - start; 
     switch (itemLength) 
     { 
      case 0: 
       builder.Append("00,"); 
       break; 
      case 1: 
       builder.Append("0"); 
       goto default; 
      default: 
       builder.Append(text, start, itemLength); 
       builder.Append(","); 
       break; 
     } 
     start = nextComma + 1; 
     nextComma = text.IndexOf(',', start); 
    } 
    // Now deal with the end... 
    int finalItemLength = text.Length - start; 
    switch (finalItemLength) 
    { 
     case 0: 
      builder.Append("00"); 
      break; 
     case 1: 
      builder.Append("0"); 
      goto default; 
     default: 
      builder.Append(text, start, finalItemLength); 
      break; 
    } 
    return builder.ToString(); 
} 

Es ist schrecklich Code, aber ich denke, es wird tun, was Sie wollen ...

+0

danken u sehr viel –

+1

Nizza Antwort. Für .NET3.5-Leute, denken Sie daran, die 'IEnumerable' in' string [] 'zu konvertieren, bevor Sie an' string.Join' übergeben werden. –

+0

In einigen Fällen, wenn ich hart Verarbeitung in Parrarel Schleife und ich zähle Ergebnis diese Methode doesn ' t arbeiten richtig. –

4
string input= "1,2,3,11,33"; 
string[] split = string.Split(input); 
List<string> outputList = new List<string>(); 
foreach(var s in split) 
{ 
    outputList.Add(s.PadLeft(2, '0')); 
} 

string output = string.Join(outputList.ToArray(), ','); 
+0

Vielen Dank –