【问题标题】:How do I save a formatted string into a string variable?如何将格式化的字符串保存到字符串变量中?
【发布时间】:2012-12-31 15:47:16
【问题描述】:

我正在创建一个应该
1. 接受一个字符串
2. 将该字符串格式化为货币(无小数或美分)并返回它

String.Format 擅长格式化,但它的格式化只适用于打印或输出值。当我单步执行代码时,我可以清楚地看到实际保存到字符串未格式化。但我需要将其格式化。这就是需要您帮助的地方。

在上面的步骤 1 中,输入的字符串将属于 3 种可能格式中的一种。 (下面,我使用 " 来指定字符串的开头和结尾。" 实际上并不是字符串的一部分。)
1.“ 2.“5000-10000”
3. ">10000"

对于这3个例子,方法应该输出
1.“ 2.“$5,000 - $10,000”
3. ">$10,000"

基本上,该方法应该在需要的地方添加 $ 和 (String.Format 做得很好)。其余的格式,如添加 或 - 很容易。我可以制作一种手动执行此操作的方法,但必须有更简单的方法!

【问题讨论】:

  • 如果你已经有一个字符串变量,我们称之为s,说string.Format( /* something with s in it */ )不会改变s本身。您可能想要重新分配,如s = string.Format( /* something with s in it */ ),其中右侧使用“旧”s 对象,然后将Format 的结果“保存”到s 并成为新的@ 987654330@。但请注意,String.Format 不能将 string 格式化为货币。它可以将数字(如decimaldouble)格式化为货币,但是一旦你有了字符串,像{0:C} 这样的格式将无法帮助更改字符串输出。
  • Jeppe Stig Nielson 你明白了!我已经有一个字符串值,所以 String.Format 无法帮助我,这就解释了为什么它什么都不做。名称 String.Format 听起来确实有点像它应该能够格式化字符串,但正如您所指出的,事实并非如此。谢谢你。我如何将您的答案标记为正确,因为它在评论中?
  • 我已使用涉及Regex 的解决方案编辑了我的帖子。它可能不如string.Format 轻,但它适用于您的样品。
  • @JLee 我将我的评论复制到一个答案中,所以现在你可以接受它,如果你愿意。

标签: c# string formatting currency string.format


【解决方案1】:

只是为了确保您String.Format 的结果分配到某处,对吗?

string result = String.Format("<{0}>", 123);

.NET 中的字符串是不可变的,因此函数总是创建新字符串而不是修改现有字符串。此外,“打印和输出”绝不是神奇的,所以当函数的结果在之后输出时,它不可能有不同的行为。

【讨论】:

    【解决方案2】:

    string.Format 不会修改字符串,而是返回一个全新的实例。您可以通过以下方式将其分配给变量:

    var newString = string.Format("{0} is my format", oldString);
    

    您可以使用Regex 解决您的问题,以防您只有原始字符串而不是其中的值。这仅适用于您带来的三个示例,但您可以通过更改模式来适应它。

    编辑:我注意到它不应用逗号,但您可以尝试修改模式以匹配您想要的输出。现在它可以按照作者的要求工作。

    string[] samples =
    {
        "<5000",
        "5000-10000",
        ">10000"
    };
    var results = samples.
        Select(s => Regex.Replace(s, @"\d+",
            m => Convert.ToInt32(m.Value).ToString("$#,#"))).
        ToArray();
    

    【讨论】:

    • 这可能行不通。您不能格式化字符串。您必须格式化数字(十进制、双精度或其他)。
    • @OlivierJacot-Descombes 在作者的案例中,它需要传递一个格式化为字符串的数字。我的示例的目的是显示新变量的分配,而不是实际的格式。
    【解决方案3】:

    (复制自我的评论)

    如果你已经有一个字符串变量,我们就叫它s,说:

    string.Format( /* something with s in it */ )
    

    不会改变s 本身。您可能想要重新分配,如

    s = string.Format( /* something with s in it */ )
    

    在右侧使用“旧”s 对象,然后将Format 的结果“保存”到s 并成为新的s

    但请注意String.Format 不能将字符串 格式化为货币。它可以将数字(如decimaldouble)格式化为货币,但是一旦你有了字符串,没有像{0:C}{0:C0} 这样的格式将有助于更改字符串输出.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      • 2014-07-17
      • 2015-04-04
      相关资源
      最近更新 更多