用C#设置字符串格式以获得相同的间距

用C#设置字符串格式以获得相同的间距,c#,string-formatting,C#,String Formatting,我一直在查找字符串格式,坦率地说,我感到困惑。这就是我想做的 我有一个“字符统计”页面(这是一个控制台应用程序),我希望它的格式如下: =----------------------------------= = Strength: 24 | Agility: 30 = = Dexterity: 30 | Stamina: 28 = = Magic: 12 | Luck: 18 = =---------------------------------

我一直在查找字符串格式,坦率地说,我感到困惑。这就是我想做的

我有一个“字符统计”页面(这是一个控制台应用程序),我希望它的格式如下:

=----------------------------------=
= Strength: 24     | Agility: 30   =
= Dexterity: 30    | Stamina: 28   =
= Magic: 12        | Luck:    18   =
=----------------------------------=
Trip_Name1 = Trip_Name1.PadRight(20,' ');
我想我基本上是想找出如何使中间的“|”分隔符处于同一位置,而不管统计数据有多少个字母或统计数据有多少个点

谢谢你的意见


编辑:我还希望结尾“=”也在同一个位置。

看来,我学到了一些新东西!正如其他一些人提到的,您可以使用
String.Format
完成同样的事情

String.Format
中使用的插值字符串还可以包括可选的对齐组件

//                index   alignment
//                    v   v
String.Format("Hello {0,-10}!", "World");
如果为负数,则字符串将左对齐。当为正值时,它是右对齐的。在这两种情况下,如果字符串短于指定的宽度,则相应地用空格填充字符串(否则,字符串只是完全插入)

我相信这是一种比摆弄
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.

您需要使用
String.PadRight
String.padlight
。这样做:

=----------------------------------=
= Strength: 24     | Agility: 30   =
= Dexterity: 30    | Stamina: 28   =
= Magic: 12        | Luck:    18   =
=----------------------------------=
Trip_Name1 = Trip_Name1.PadRight(20,' ');
我想这就是你要找的

String.Format("{0,-20}|","Dexterity: 30") 

将值向左对齐并填充到20个字符。唯一的问题是,如果参数长度超过20,它将不会被截断。

早在80年代,我就在做基于文本的游戏时经常使用这种技术。很明显,在那些日子里,我们没有string.Format;但它允许您在代码中可视化布局

按照您希望的方式预先格式化文本,然后像这样使用string.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();

我甚至不知道“Pad”的存在。我喜欢!谢谢@JonathanPlumb:我不知道对齐存在于
String.Format
中。更新的答案。您甚至可以编写自己的自定义字符串格式提供程序,在字符串格式调用中使用
IFormatProvider
ICustomFormatter
Nice的自定义实现来执行任何您想要的操作!我甚至不知道
String.Format
,+1的这个特性。