je veux trouver un moyen de efficent à faire:C# pad gauche à chaîne
j'ai une chaîne comme:
'1,2,5,11,33'
je veux à zéro pad uniquement aux chiffres qui en dessous de 10 (ont un chiffres)
donc je veux obtenir
'01,02,05,11,33'
grâce
je veux trouver un moyen de efficent à faire:C# pad gauche à chaîne
j'ai une chaîne comme:
'1,2,5,11,33'
je veux à zéro pad uniquement aux chiffres qui en dessous de 10 (ont un chiffres)
donc je veux obtenir
'01,02,05,11,33'
grâce
Combien mesurez-vous vraiment sur l'efficacité? Personnellement, j'utiliser:
string padded = string.Join(",", original.Split(',')
.Select(x => x.PadLeft(2, '0')));
(Comme il est indiqué dans les commentaires, si vous utilisez .NET 3.5, vous aurez besoin d'un appel à ToArray
après la Select
.)
C'est certainement pas la solution la plus efficace, mais c'est ce que j'utiliserais jusqu'à ce que je prouvé que ce n'était pas assez efficace. Voici une 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();
}
Il est terrible Code, mais je pense qu'il va faire ce que vous voulez ...
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(), ',');
merci beaucoup –
thank u très –
réponse Nice. Pour les gens de .NET3.5, n'oubliez pas de convertir le 'IEnumerable' en' string [] 'avant de passer à' string.Join' –
Dans certains cas, quand je fais un traitement en boucle parrarel et que je compte le résultat, cette méthode doesn ' t fonctionne correctement. –