用C#格式化字符串以获得相同的间距
本文关键字:格式化 字符串 | 更新日期: 2023-09-27 18:24:26
我一直在查找字符串格式,坦率地说,我很困惑。这就是我想做的。
我有一个"字符统计"页面(这是一个控制台应用程序),我希望它的格式如下:
=----------------------------------=
= Strength: 24 | Agility: 30 =
= Dexterity: 30 | Stamina: 28 =
= Magic: 12 | Luck: 18 =
=----------------------------------=
我想基本上我正在努力找出如何使中间的"|"分隔符在同一个位置,无论数据是多少个字母或数据是多少点。
感谢您的投入。
编辑:我还希望结尾"="也在同一个位置。
我似乎学到了一些新东西!正如其他一些人所提到的,您可以使用String.Format
来完成同样的事情。
String.Format
中使用的插值字符串还可以包括可选的对齐组件。
// index alignment
// v v
String.Format("Hello {0,-10}!", "World");
如果为负数,则字符串左对齐。当为正时,它是右对齐的。在这两种情况下,如果字符串短于指定的宽度,则会相应地用空格填充字符串(否则,字符串只是完全插入)。
我相信这是一种比摆弄String.PadRight
更容易、更可读的技术。
您也可以使用String.PadRight
(或String.PadLeft
)。示例:
class Stats {
// Contains properties as you defined ...
}
var stats = new Stats(...);
int leftColWidth = 16;
int rightColWidth = 13;
var sb = new StringBuilder();
sb.AppendLine("=----------------------------------=");
sb.Append("= ");
sb.Append(("Strength: " + stats.Strength.ToString()).PadRight(leftColWidth));
sb.Append(" | ");
sb.Append(("Agility: " + stats.Agility.ToString()).PadRight(rightColWidth));
// And so on.
我在80年代做基于文本的游戏时经常使用这种技术。显然我们没有绳子。回到那个年代;但它允许您在代码中可视化布局。
按照您想要的布局预先格式化文本,然后只使用字符串。Format()函数类似于…
string formattedText = @"
=----------------------------------=
= Strength: {0,2} | Agility: {3,2} =
= Dexterity: {1,2} | Stamina: {4,2} =
= Magic: {2,2} | Luck: {5,2} =
=----------------------------------=".Trim();
string output = string.Format(formattedText, 12, 13, 14, 15, 16, 1);
Console.WriteLine(output);
Console.ReadLine();
String.Format("{0,-20}|","Dexterity: 30")
将值向左对齐,并将其填充为20个字符。唯一的问题是,如果参数长于20,它将不会被截断。
您需要使用String.PadRight
或String.PadLeft
。这样做:
Trip_Name1 = Trip_Name1.PadRight(20,' ');
我想这就是你要找的。