通过添加空格来格式化文本

时间:2014-03-15 13:09:57

标签: c# string

我正在尝试按空格格式化字符串。 所有字符串通常看起来像

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

3 个答案:

答案 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.FormatStringBuilder.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;, 民, 名称, 点);