整数的字符串格式化 c#

4
我有一个类包含两个字符串,一个反映当前年份,另一个表示某个值。这些字段根据用户指定的格式(使用string.format)组合在一起。重要提示:用户输入的数据以前是生成的,因此它总是一个整数,我们不必担心这个问题。
我们的默认格式是"{0}-{1:000}"。然而,现在用户指定的数据是一个字符串,它无法正确地格式化。以下是一个例子:
用户输入12作为所需数据。在格式化时,它只显示2011-12,而不是2011-0012。我该如何确保添加0而不进行一些疯狂的循环来附加0或尝试解析数字(假设它是一个数字。应该只有足够的0,以等于长度为4的字符串)?
以下是我尝试过的格式:
"{0}-{1:0000}" -> 用户被迫输入数字时的原始格式。 "{0}-{1:D4}" "{0}-{1:N4}"

有一个验证过程,确保输入的数据与格式匹配。如果不匹配,我们会忘记0并简单地放置2011:aa。我的问题实际上是希望尽可能地使系统保持与旧系统相似,特别是如果我们自己生成数据(我们总是使用数字)。 - The Sheek Geek
2011-0012 究竟代表什么? - Security Hound
年份和可指定或生成的序列号。 - The Sheek Geek
2个回答

5
你可以使用 string.PadLeft() 方法:
string output = string.Format("{0}-{1}", "2011", input.PadLeft(4, '0'));

问题在于它总是会在末尾添加四个0(除非我错了)。字符串需要长度为四。这意味着如果用户输入123,则结果字符串应为0123。虽然,我可以获取长度并找出要添加多少个0。但如果默认格式更改,则硬编码,因此最好知道如何使用字符串格式来实现此目的。 - The Sheek Geek
2
@The Sheek Geek 最好仔细看一下 Padleft。它使用填充保证最小大小,除非必须添加额外的字符。这种方法很好,除非您可以有负整数...在这种情况下,您将看到一些奇怪的现象,例如“-3”变成“00-3”。 - deepee1
@TheSheekGeek - String.Format可能不是这个任务的最佳解决方案。正如BrokenGlass所指出的那样,**string.PadLeft()**更适合这项工作。 - Security Hound

2
您可以使用string.PadLeft在左侧添加零,或使用int.TryParse尝试将其转换为整数。后者将兼作您的验证检查。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接