快速方法构建字符串,前导0为整数?

时间:2009-06-30 15:31:36

标签: c#

如果需要这样,我为前缀为0的整数构建了一个字符串:

 // myInt as input, for example: 101;
 List<string> sList = new List<string>();
 string format = "00#"; // how to build format dynamicall?
 for(int i= 1; i <= myInt; i++)
 {
     sList.Add(i.ToString(format));
 }

预期结果应为:

 001
 002
 ...
 010
 ...
 101

如果我的整数是10或1000,我该如何动态构建格式?

4 个答案:

答案 0 :(得分:11)

"#".PadLeft(desiredWidth, '0')

怎么样?

你可以从desiredWidth获得myInt.ToString().Length - 有点粗鲁,但它会起作用:)

换句话说:

List<string> sList = new List<string>();
string format = "#".PadLeft(myInt.ToString().Length, '0');
for(int i= 1; i <= myInt; i++)
{
    sList.Add(i.ToString(format));
}

或者你可以完全跳过格式字符串:

List<string> sList = new List<string>();
int desiredWidth = myInt.ToString().Length;
for(int i= 1; i <= myInt; i++)
{
    sList.Add(i.ToString().PadLeft(desiredWidth, '0'));
}

答案 1 :(得分:3)

如何使用standard numeric format strings

List<string> sList = new List<string>();
string format = string.Format("D{0}", myInt.ToString().Length);
for(int i= 1; i <= myInt; i++)
{
    sList.Add(i.ToString(format)); 
}

答案 2 :(得分:2)

您可以使用带有ceil的log base 10来获取数字的数字长度。

int i = 123;
int len = Convert.ToInt32(Math.Ceiling(Math.Log10(i)));

由于C#可以隐式地将int转换为double,因此它应该是可靠的。然后你可以避免字符串转换。

我没有在int上对ToString()进行基准测试,但似乎可能会更好。

答案 3 :(得分:1)

您不需要使用“00#”,“000”也可以完成同样的工作。

// myInt as input, for example: 101;
List<string> sList = new List<string>();
string format = new string('0', myInt.ToString().Length);
for(int i= 1; i <= myInt; i++)
{
    sList.Add(i.ToString(format));
}