【问题标题】:How to format the string properly?如何正确格式化字符串?
【发布时间】:2014-10-12 21:32:58
【问题描述】:

我有一条消息打印出实体的名称及其计数。我用过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

【问题讨论】:

标签: c# string-formatting stringbuilder


【解决方案1】:

这是一种不使用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

【讨论】:

  • 我没有得到相应的结果,它只是将数字推到了右边。不知道为什么?
  • @c_sharp 您是否使用了上面没有多余空格的格式字符串?
  • @C_sharp,您需要的数字可能大于20,具体取决于您最长的标签字符串有多长。
【解决方案2】:

对于简单的格式,您可以使用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);

【讨论】:

    猜你喜欢
    • 2017-09-25
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    相关资源
    最近更新 更多