将字符串格式化为列

时间:2010-06-04 23:00:49

标签: c# string string-formatting

有一种很酷的方法可以采取这样的方式:

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将空间更改为可以承受空间删除下拉列表格式的空间。

3 个答案:

答案 0 :(得分:61)

您可以使用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 - 没有办法自动完成。

答案 1 :(得分:1)

除了Tomas的回答之外,我只想指出字符串插值可以在C#6或更新版本中使用。

<div id="header">
    <div id="menuwrapper">
    
    <div id="menu">
      <ul class="pad">
        </ul>
    <ul class="rechts">
    
    <li><a class="a1" id="page1" href="javascript:;">Services</a></li>
    <li><a class="a1" id="page2" href="javascript:;">Portfolio</a></li>
    <li><a class="a1" id="page3" href="javascript:;">Contact</a></li>
    </ul>
    </div>
    </div>
    </div>

答案 2 :(得分:0)

我无法在上面添加评论,但在接受的答案中指出:

<块引用>

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

这实际上可以在运行时通过“即时”创建格式字符串以编程方式完成:

string p0 = "first";
string p1 = "separated by alignment value x";

int x = n * 10; // calculate the alignment x as needed

// now use x to give something like: {0,-20}, {1}
string fmt = "{0,-" + x + "},{1}"; // or whatever formatting expression you want

// then use the fmt string
string str = string.Format(fmt, p0, p1)

// with n = 2 this would give us
"first               ,separated by alignment value x"