Frage

Ich mag eine effiziente Art und Weise zu tun finden:

Ich habe eine Zeichenfolge wie:

'1,2,5,11,33'

Ich mag Pad Null nur auf die Zahlen, die unter 10 (eine Ziffer hat)

so will ich bekommen

'01,02,05,11,33'

Dank

War es hilfreich?

Lösung

How much do you really care about efficiency? Personally I'd use:

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

(As pointed out in the comments, if you're using .NET 3.5 you'll need a call to ToArray after the Select.)

That's definitely not the most efficient solution, but it's what I would use until I'd proved that it wasn't efficient enough. Here's an 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();
}

It's horrible code, but I think it will do what you want...

Andere Tipps

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(), ',');
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top