使用 string.format 在字符串中插入空格

问题描述 投票:0回答:7

我之前一直使用 C# String.Format 来格式化数字(在这个例子中我只是想插入一个空格):

String.Format("{0:### ###}", 123456);

输出:

"123 456"

在这种特殊情况下,数字是一个字符串。我的第一个想法是简单地将其解析为一个数字,但这在上下文中没有意义,必须有一种更漂亮的方法。

以下不起作用,因为 ## 会查找数字

String.Format("{0:### ###}", "123456");

输出:

"123456"

格式化时相当于#的字符串是什么? String.Format 的强大功能对我来说仍然很陌生。

c# string string.format
7个回答
9
投票

正如 Heinzi 指出的,字符串参数不能有格式说明符。

因此,您可以使用以下内容代替 String.Format:

string myNum="123456";
myNum=myNum.Insert(3," ");

8
投票

您必须先将字符串解析为数字。

int number = int.Parse("123456");
String.Format("{0:### ###}", number);

当然你也可以使用字符串方法,但这不太可靠且不太安全:

string strNumber =  "123456";
String.Format("{0} {1}", strNumber.Remove(3), strNumber.Substring(3));

2
投票

除非你先解析字符串,否则无法做你想做的事。

根据您的评论,您实际上只需要一个简单的格式,因此您最好只实现一个小的辅助方法,仅此而已。 (恕我直言,如果字符串不是“逻辑上”数字,那么解析该字符串并不是一个好主意;您无法真正确定将来输入字符串可能根本不是数字。 我会选择类似的东西:

public static string Group(this string s, int groupSize = 3, char groupSeparator = ' ') { var formattedIdentifierBuilder = new StringBuilder(); for (int i = 0; i < s.Length; i++) { if (i != 0 && (s.Length - i) % groupSize == 0) { formattedIdentifierBuilder.Append(groupSeparator); } formattedIdentifierBuilder.Append(s[i]); } return formattedIdentifierBuilder.ToString(); }

编辑

:概括为通用分组大小和组分隔符。


1
投票

var str = "123456"; var result = String.Format("{0} {1}", str.Substring(0,3), str.Substring(3));



1
投票
string

不是

IFormattable

Console.WriteLine("123456" is IFormattable); // False Console.WriteLine(21321 is IFormattable); // True

如果参数不是 
IFormattable

,则没有必要提供格式,唯一的方法是将字符串转换为

int
long
    


1
投票

稍微改编自

此处

class MyClass { static void Main(string[] args) { string sInput, sRegex; // The string to search. sInput = "123456789"; // The regular expression. sRegex = "[0-9][0-9][0-9]"; Regex r = new Regex(sRegex); MyClass c = new MyClass(); // Assign the replace method to the MatchEvaluator delegate. MatchEvaluator myEvaluator = new MatchEvaluator(c.ReplaceNums); // Replace matched characters using the delegate method. sInput = r.Replace(sInput, myEvaluator); // Write out the modified string. Console.WriteLine(sInput); } public string ReplaceNums(Match m) // Replace each Regex match with match + " " { return m.ToString()+" "; } }

怎么样?

自从我使用 C# 以来已经很多年了,我无法测试,但这可能可以作为一个单行代码,如果你只需要它一次,这可能会“更整洁”:

sInput = Regex("[0-9][0-9][0-9]").Replace(sInput,MatchEvaluator(Match m => m.ToString()+" "));



0
投票
#

是一个

数字占位符
,并且它特定于数字格式。因此,您不能在字符串上使用它。 将字符串解析为数字,以便应用格式规则,或者使用其他方法将字符串分成两部分。

string.Format("{0:### ###}", int.Parse("123456"));

© www.soinside.com 2019 - 2024. All rights reserved.