2011-10-05 76 views
4

我有一个类包含两个字符串,一个反映当前年份和一个代表某个值的字符串。这些字段基于用户指定的格式(使用string.format)进行组合。重要提示:用户输入的数据曾经被生成过,因此它始终是一个整数,我们不必担心这一点。整数的字符串格式c#

我们的默认格式是“{0} - {1:000}”。但是,现在用户指定的数据是一个字符串,它不希望格式适当。这里是一个例子:

用户输入12,因为需要数据。格式化时,不显示2011-0012,只显示2011-12。我怎样才能确保添加0不会做一些疯狂的循环,将追加0或试图解析数字(假设它是一个数字。应该只有足够的0等于一个长度为4的字符串)?

这里是我试过的格式:

“{0} - {1:0000}” - >当用户被迫输入数字的原始格式。 “{0} - {1:D4}” “{0} - {1:N4}”

+0

有一个验证过程可确保输入的数据与格式匹配。如果没有,我们会忘记0,并简单地把2011年:aa。我的问题真的来自于希望尽可能保持系统与旧系统一样,特别是如果我们自己生成数据(我们始终使用数字) –

+0

** 2011-0012 **完全代表什么? –

+0

年,然后可以指定或生成一个序列号。 –

回答

5

你可以使用string.PadLeft()

string output = string.Format("{0}-{1}", "2011", input.PadLeft(4, '0')); 
+0

这个问题是,它总是会添加四个0到最后(除非我错了)。该字符串需要长度为四。所以这意味着如果用户输入123,那么结果字符串应该是0123。尽管如此,我总是可以得到长度并找出添加多少个0。如果默认格式发生变化,那么这是硬编码,这就是为什么最好知道如何使用字符串格式来实现这一点。 –

+2

@ Sheek Geek最好看Padleft更近一点。它使用填充保证了最小尺寸,并且除非必须添加额外的字符。这种方法是好的,除非你可以有负整数..在这种情况下,你会看到一些奇怪,如“-3”改为“00-3” – deepee1

+0

@TheSheekGeek - String.Format可能不是这项任务的最佳解决方案。正如BrokenGlass指出的那样.... ** string.PadLeft()**对于这项工作更好。 –

2

您可以使用string.PadLeft到零添加到离开,或使用int.TryParse尝试转换为整数。后者将作为您的验证检查加倍。