代码之家  ›  专栏  ›  技术社区  ›  Vaccano

将字符串格式化为列

  •  34
  • Vaccano  · 技术社区  · 14 年前

    有没有一种很酷的方法可以做到这一点:

    Customer Name - City, State - ID
    Bob Whiley - Howesville, TN - 322
    Marley Winchester - Old Towne, CA - 5653
    

    并将其格式化为如下格式:

    Customer Name     - City,       State - ID
    Bob Whiley        - Howesville, TN    - 322
    Marley Winchester - Old Towne,  CA    - 5653
    

    使用字符串格式命令?

    如果一个人很长的话,我不会太在意该怎么做。例如,我可以这样做:

    Customer Name     - City,       State - ID
    Bob Whiley        - Howesville, TN    - 322
    Marley Winchester - Old Towne,  CA    - 5653
    Super Town person - Long Town Name, WA- 45648 
    

    提供一些背景。我有一个下拉框,显示与此非常相似的信息。现在,我在下拉列表中创建项目的代码如下所示:

    public partial class CustomerDataContract
    {
        public string DropDownDisplay
        {
            get
            {
                 return  Name + " - " + City + ",  " + State + " - " + ID;
            }
        }
    }
    

    我正在寻找一种更好的格式化方法。有什么想法吗?


    这就是我最后得出的结论:

    HttpContext.Current.Server.HtmlDecode(
        String.Format("{0,-27} - {1,-15}, {2, 2} - {3,5}", 
        Name, City, State, ID)
        .Replace(" ", " "));
    

    htmldecode将更改为可以承受下拉列表中删除空间格式的空间。

    2 回复  |  直到 14 年前
        1
  •  59
  •   Tomas Petricek    14 年前

    可以使用指定文本所占的列数以及对齐方式 Console.WriteLine 或使用 String.Format :

    // Prints "--123       --"
    Console.WriteLine("--{0,-10}--", 123);
    // Prints "--       123--"
    Console.WriteLine("--{0,10}--", 123);
    

    数字指定要使用的列数,符号指定对齐方式( - 对于左对齐, + 用于正确对齐)。因此,如果您知道可用的列数,您可以编写如下内容:

    public string DropDownDisplay { 
      get { 
        return String.Format("{0,-10} - {1,-10}, {2, 10} - {3,5}"),
          Name, City, State, ID);
      } 
    } 
    

    如果要根据整个列表(例如,最长的名称)计算列数,则需要提前获取该数字并将其作为参数传递给 DropDownDisplay -无法自动执行此操作。

        2
  •  1
  •   willbush    6 年前

    除了Tomas的答案,我还想指出,字符串插值可以在C 6或更高版本中使用。

    // with string format
    var columnHeaders1 = string.Format($"|{0,-30}|{1,-4}|{2,-15}|{3,-30}|{4,-30}|{5,-30}|{6,-30}", "ColumnA", "ColumnB", "ColumnC", "ColumnD", "ColumnE", "ColumnF", "ColumnG");
    
    // with string interpolation
    var columnHeaders2 = $"|{"ColumnA",-30}|{"ColumnB",-4}|{"ColumnC",-15}|{"ColumnD",-30}|{"ColumnE",-30}|{"ColumnF",-30}|{"ColumnG",-30}";