5

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

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

=----------------------------------=
= Strength: 24     | Agility: 30   =
= Dexterity: 30    | Stamina: 28   =
= Magic: 12        | Luck:    18   =
=----------------------------------=

我想基本上我正在尝试找出如何制作中间'|' 无论 stat 有多少个字母或 stat 有多少分,分隔线都在同一个地方。

感谢您的输入。

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

4

4 回答 4

12

我似乎学到了一些新东西!正如其他一些人所提到的,您可以使用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.
于 2013-07-23T19:07:34.130 回答
8

早在 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();
于 2013-07-23T19:15:19.770 回答
5
String.Format("{0,-20}|","Dexterity: 30") 

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

于 2013-07-23T19:12:58.083 回答
1

您将需要使用 aString.PadRight或 a String.PadLeft。做这样的事情:

Trip_Name1 = Trip_Name1.PadRight(20,' ');

我想这就是你要找的东西。

于 2013-07-23T19:09:28.440 回答