如何将格式化的字符串保存为字符串变量



我正在创建一个c#方法,它应该
1. 接收字符串
2. 将该字符串格式化为Currency(无小数或分)并返回

String.Format在格式化方面很好,但是它的格式化仅在打印或输出值时应用。当我逐步执行代码时,我可以清楚地看到实际保存到字符串中的值没有被格式化。但我需要格式化。这就是需要你帮忙的地方。

在上面的步骤1中,输入的字符串将分为三种可能的格式之一。(下面,我使用"来指定字符串的开始和结束。"实际上不是字符串的一部分。)
1. "& # 60;5000"
2. "5000 - 10000"
3." & # 62; 10000 "

对于这3个例子,该方法应该输出
1. "& # 60;5000美元的"
2. "$5,000 - $10,000"
3."& # 62;10000美元"

基本上,该方法应该在需要的地方添加$和(String.Format做得很好)。其余的格式化,如添加<、>或-很容易。我可以做一个方法来手动做到这一点,但必须有一个更简单的方法!

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

string result = String.Format("<{0}>", 123);
. net中的字符串是不可变的,所以函数总是创建新的字符串,而不是修改现有的字符串。此外,"打印和输出"也不是什么神奇的东西,所以当一个函数的结果在之后输出时,它不可能有不同的行为。

string.Format不修改字符串,而是返回一个全新的实例。您可以通过:

将它赋值给一个变量:
var newString = string.Format("{0} is my format", oldString);

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

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

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

(复制自我的评论)

如果你已经有了一个字符串变量,我们把它命名为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}这样的格式将有助于改变字符串输出。

相关内容

  • 没有找到相关文章

最新更新