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

本文关键字:格式化 文本 空白 添加 | 更新日期: 2023-09-27 17:50:20

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

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"自定义说明符作为零占位符符号来格式化记录的索引/编号。0:00将为1值提供01

还要记住条目格式语法是{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"

字符串。使用对齐功能的格式化和复合格式化

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

尝试使用

右对齐数字

字符串。Format("{0} {1} {2,4}p",全国矿工工会,名字点),