通过添加空白来格式化文本
本文关键字:格式化 文本 空白 添加 | 更新日期: 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.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"
字符串。使用对齐功能的格式化和复合格式化
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",全国矿工工会,名字点),