【问题标题】:Format string without string.Format?没有string.Format的格式字符串?
【发布时间】:2012-10-26 13:32:22
【问题描述】:

我添加了一个int 类型的变量,我用它来调用类似的东西:

x.ToString("0000");

我将x 更改为输入string,现在上面的内容无效。是现在格式化x的唯一方法:

string.Format("{0:0000}",x);

还是有捷径?

我正在使用StringBuilder 来构建字符串,那么AppendFormat 也同样适用吗?

【问题讨论】:

  • 不是真的,这基本上是这样做的。你正在格式化一个字符串,不是吗?那为什么不用string.Format呢?
  • 您必须将parse 字符串返回到一个数字才能应用新格式。数字没有格式,字符串不是数字。
  • string.Format("{0:0000}",x) 的结果对于不同类型的 x(即 intstring)是不一样的。所以我猜你用上面的表达式不会得到想要的结果。
  • @TimSchmelter - 我以前就是这样做的,只是不确定是否有更短的方法。
  • @Xaisoft:在您想要显示或打印它们的最后一个位置将对象转换为字符串,而不是更早。

标签: c# string.format


【解决方案1】:

你不能像处理数值那样格式化字符串,所以如果你想对字符串应用数字格式化,你必须先将其解析为数字:

Int32.Parse(x).ToString("0000")

【讨论】:

  • @Xaisoft:不是那么毫无意义,因为至少它可以工作......当x 是一个字符串时使用string.Format("{0:0000}", x) 是没有意义的,因为格式被忽略了。如果x 包含例如"42",您将得到"42",而不是"0042"
  • 我所说的无意义实际上是我宁愿只做string.Format而不是将其转换回int然后格式化。
  • @Xaisoft:是的,这是一种低效且笨拙的方法,但没有捷径,因为您已将值转换为字符串。
【解决方案2】:

没有真正的捷径。

Int32 不知道 int 应该有多少个前导零。

您通过格式化为字符串来做正确的事情。如果你用它来显示东西,那应该不是问题(如果你想执行数字运算,你仍然有x)。

AppendFormatstring.Format 类似,但附加到调用它的 StringBuilder 对象。

【讨论】:

    【解决方案3】:

    不幸的是,这是最好的方法。请记住,每种类型都有其自己的可被覆盖的 ToString 方法。 int 类型的 ToString 允许您在转换为字符串时传递格式以格式化整数。 DateTime 也类似。但是,字符串类型的 ToString 只返回字符串,因为源已经是字符串类型。要格式化字符串,必须调用 string.Format。

    【讨论】:

      【解决方案4】:

      没有。

      您必须将整数的字符串表示形式转换为实际整数,以便可以使用所需数量的前导零正确格式化。

      如果字符串已经是那种格式,为什么需要重新格式化?

      【讨论】:

        【解决方案5】:

        MSDN 展示了一些使用说明符的方法:http://msdn.microsoft.com/en-us/library/fzeeb5cd.aspx#Y759

        例子

        x.ToString("G");
        

        此链接列出了所有格式选项:http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

        【讨论】:

        • 仅供参考,日期也有标准.ToString()
        【解决方案6】:
        x.PadLeft(4, '0'); 
        

        将提供与

        相同的结果
        x.ToString("0000"); 
        

        假设x 仍然是一个数字(它是一个string,所以如果没有至少TryCast()-ing 它就无法确定这一点。

        【讨论】:

        • PadLeft 添加了我相信的空格,所以你不应该使用:x.PadLeft(4, '0')?
        【解决方案7】:

        使用字符串插值(从 C# 6 开始)。

        https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated

        {<interpolationExpression>[,<alignment>][:<formatString>]}

        用你的例子:

        $"{x:0000}"

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-10
          • 1970-01-01
          • 2017-04-07
          • 2019-02-24
          相关资源
          最近更新 更多