正在创建固定长度的数字字符串

本文关键字:数字 数字字符 字符串 创建 | 更新日期: 2023-09-27 18:30:08

我有一定数量的文件需要程序中的文件名。文件具有固定的命名方式,即(前缀+数字).jpg。例如:head001.jpghead002.jpghead003.jpg等。

最后,数字的数量可能会有所不同,因此程序有变量可以更改文件命名的起点、终点以及命名中使用的数字位数。例如:第二种情况可能是tail00001.jpgtail00002.jpgtail00003.jpg等,直到tail00100.jpg
在这种情况下:起始数字为0,结束数字为100,numDigits为5

在C++中,我看到了如下格式设置:
format <<prefix<<"%0"<<numDigits<<"d."<<filetype;//其中formatstringstream

然而,我不太确定在C#中实现这一点的最佳方法,我想知道如何解决这个问题。

正在创建固定长度的数字字符串

只需使用string.Format,带有一个精度说明符来表示您想要的位数:

string name = string.Format("tail{0:d6}.jpg", index);

有关标准数字字符串格式的详细信息,请参阅MSDN文档。

当然,您可以通过编程建立字符串格式:

string name = string.Format("tail{0:d" + digits + "}.jpg", index);

或者按照Vano的建议使用PadLeft。不过,您可能仍然希望使用string.Format

string name = string.Format("tail{0}.jpg",
                            index.ToString().PadLeft(digits, '0'));

使用PadLeft的优点是更容易更改填充值,尽管我想您无论如何都希望它是0

字符串具有PadLeft方法:

int n1 = 1;
string t1 = n1.ToString().PadLeft(5, '0'); // This will return 00001
int n10 = 10;
string t2 = n10.ToString().PadLeft(5, '0'); // This will return 00010 and so on...

您可以使用字符串来完成此操作。格式化

var result = string.Format("{0}{1:00000}{2}", prefix, number, filetype)

或者你可以使用padleft

var result = prefix + number.ToString().PadLeft('0', numDigits) + "." + extension;

或者您可以使用两者的混合:)

在这种情况下:起始数字为0,结束数字为100numDigits将是5

您可以使用String.Format和十进制格式/精度说明符"D"`以及for循环:

int start = 0;
int end = 100;
int numDigits = 5;
string name = "tail";
string extension = ".jpg";
for(int i = start; i <= end; i++)
{
    string fileName = string.Format(
        "{0}{1}{2}", name, i.ToString("D" + numDigits), extension);
    Console.WriteLine(fileName);
}

输出:

tail00000.jpg
tail00001.jpg
tail00002.jpg
tail00003.jpg
tail00004.jpg
tail00005.jpg
tail00006.jpg
tail00007.jpg
tail00008.jpg
tail00009.jpg
tail00010.jpg
....
tail100.jpg

适用于现代.NET 5.0+(2021更新)

int myint = 100;
string zeroPadded = $"{myint:d8}";      // "00000100"
string spacePadded = $"{myint,8}";      // "     100"