我正在创建一个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
不能将字符串格式化为货币。它可以格式化数字(如decimal
或double
)作为货币,但是一旦你有了字符串,没有像{0:C}
或{0:C0}
这样的格式将有助于改变字符串输出。