如何将格式化字符串保存到字符串变量中?

JLe*_*Lee 0 c# string formatting string.format currency

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

String.Format非常适合格式化,但其格式仅适用于打印或输出值.当我单步执行代码时,我可以清楚地看到实际保存到字符串中的值没有格式化.但我需要它格式化.这就是你需要帮助的地方.

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

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

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

Mat*_*nen 7

只是为了确保,你正在分配String.Format某个地方的结果,对吧?

string result = String.Format("<{0}>", 123);
Run Code Online (Sandbox Code Playgroud)

.NET中的字符串是不可变的,因此函数总是创建新字符串而不是修改现有字符串.此外,"打印和输出"绝不是神奇的,因此当一个函数后来输出结果时,它不可能表现得不同.


Mir*_*Mir 6

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

var newString = string.Format("{0} is my format", oldString);
Run Code Online (Sandbox Code Playgroud)

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

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

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