我正在尝试按空格格式化字符串。 所有字符串通常看起来像
01. Anton 30p
02. Cinderella 20p
03. Thomas 18p
04. Anastacia-Laura 16p
我想格式化每个字符串,这些点从同一列开始。 在那里我写道:
s = stringUpToName;
int addSpacing = 37 - s.Length;
for (int i = 0; i < addSpacing; i += 1) s += " ";
s += points;
这种方式越来越接近,但它仍然没有完美格式化。
我希望它看起来像这样:
01. Anton 30p
02. Cinderella 20p
03. Thomas 18p
04. Anastacia-Laura 16p
答案 0 :(得分:4)
使用"0" custom specifier作为零占位符,以格式化记录的索引/数量。 0:00
会为01
提供值1
。
另请注意,item format syntax是 {index [,alignment] [:formatString]} ,其中alignment表示首选格式化字段宽度。因此,将对齐添加到第二项格式{1,20}
会为您提供20个字符的右对齐字段宽度。负对齐字段将左对齐。
总格式字符串将显示为"{0:00}. {1,-20}{2}p"
如果您是构建字符串,则可以将其与String.Format
或StringBuilder.AppendFormat
一起使用;如果您将其写入控制台,则可以使用Console.WriteLine
。
int index = 1;
string name = "Anton";
int points = 30;
var result = String.Format("{0:00}. {1,-20}{2}p", index, name, points)
// "01. Anton 30p"
答案 1 :(得分:0)
使用对齐功能的String.Format和Composite Formatting
string[] names = new string[]
{
"1. Anton 30p",
"2. Cinderella 20p",
"3. Thomas 18p",
"4. Anastacia-Laura 16p"
};
foreach(string s in names)
{
int lastSpace = s.LastIndexOf(' ');
int firstSpace = s.IndexOf(' ');
string result = string.Format("{0,-4}{1,-37}{2,4}", s.Substring(0, firstSpace), s.Substring(firstSpace + 1, lastSpace), s.Substring(lastSpace+1));
Console.WriteLine(result);
}
请记住,要在列中看到输出完全对齐,您需要使用像Lucida Console或Courier这样的固定宽度字体,因为宽度可变的字体使用较少的像素来打印I而不是打印W。
答案 2 :(得分:0)
尝试使用
右对齐数字String.Format(&#34; {0} {1} {2,4} p&#34;, 民, 名称, 点);