如何正确格式化字符串?

时间:2014-08-19 17:12:57

标签: c# string-formatting stringbuilder

我有一条消息,我打印出实体名称及其计数。我使用过StringBuilder课程。我有这样的代码:

   message.AppendFormat("Items1:    {0}",item1count).AppendLine();
   message.AppendFormat("Items2Byb:    {0}",item2count).AppendLine();
   message.AppendFormat("Items3STCDEE:    {0}",item3count).AppendLine();
   message.AppendFormat("Items4HTECEEGG:    {0}",item4count).AppendLine();
   message.AppendFormat("ItemsASSTEC:    {0}",item5count).AppendLine();

结果如下:

  Items1:         1
  Items2Byb:         3
  Items3STCDEE           5

无论物品名称的长度如何,我想要的是正确对齐:

      Items1:            1
      Items2Byb:         3
      Items3STCDEE       5

2 个答案:

答案 0 :(得分:6)

这是一种不使用PadRight的方法,该方法假设左侧标签的最大长度为20。当然,您应该将数字调整为1 + max

using System;
using System.IO;
using System.Text;

public class P{
    public static void Main(string[] args) {
        StringBuilder message = new StringBuilder();
        message.AppendFormat("{0,-20}{1}","Items1:",1).AppendLine();
        message.AppendFormat("{0,-20}{1}","Items2Byb:",2).AppendLine();
        message.AppendFormat("{0,-20}{1}","Items3STCDEE:", 3).AppendLine();
        message.AppendFormat("{0,-20}{1}","Items4HTECEEGG:",4).AppendLine();
        message.AppendFormat("{0,-20}{1}","ItemsASSTEC:",5).AppendLine();
        Console.WriteLine(message.ToString());
    }
}

输出:

Items1:             1
Items2Byb:          2
Items3STCDEE:       3
Items4HTECEEGG:     4
ItemsASSTEC:        5

答案 1 :(得分:4)

对于简单格式,您可以使用PadRight(为简单起见使用文字1,3,4

var message = new StringBuilder();
int width = 20;

message.Append("Items1:".PadRight(width) + 1).AppendLine();
message.Append("Items2Byb:".PadRight(width) + 3).AppendLine();
message.Append("Items3STCDEE:".PadRight(width) + 4).AppendLine();
message.Append("Items4HTECEEGG:".PadRight(width) + 5).AppendLine();
message.Append("ItemsASSTEC:".PadRight(width) + 6).AppendLine();

将打印:

Items1:             1
Items2Byb:          3
Items3STCDEE:       4
Items4HTECEEGG:     5
ItemsASSTEC:        6

或者您可以定义自定义方法(了解{0,-20}格式的更多内容,考虑this article。基本上它表示从右边填充空格,直到字符串占用20个字符。):

public void AddLine(StringBuilder builder, string name, int val)
{
    builder.AppendFormat("{0,-20}{1}", name, val).AppendLine();
}

并重复使用它:

AddLine(message, "Items1:", 1);
AddLine(message, "Items2Byb:", 3);
AddLine(message, "Items3STCDEE:", 4);
AddLine(message, "Items4HTECEEGG:", 5);
AddLine(message, "ItemsASSTEC:", 6);