C#中的字符串格式化以获得相同的间距

时间:2013-07-23 19:04:17

标签: c# string-formatting

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

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

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

我想基本上我正试图找出如何让中间'|'分频器在同一个地方,无论统计数字多少或统计数据有多少。

感谢您的投入。

编辑:我也希望结尾'='也在同一个地方。

4 个答案:

答案 0 :(得分: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.

答案 1 :(得分:7)

我过去常常在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();

答案 2 :(得分:4)

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

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

答案 3 :(得分:1)

您需要使用String.PadRightString.PadLeft。做这样的事情:

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

This是我想要的。