从特定位置开始将字符串连接在一起

时间:2014-05-23 04:49:08

标签: c# string string-formatting

我希望将多个字符串连接在一起,但要以简洁的方式显示。

实施例

Record[1]    Title : xxxxxx      Date : dd/mm/yy
Record[1000]    Title : xxxxxx       Date : dd/mm/yy

如果我只是将字符串连接在一起,随着记录数量的增加,标题和日期将被推到屏幕上看起来很乱(如上所示)。我希望标题和日期总是从字符串中的某个位置(比如位置25)开始,所以无论记录长度的数量是什么,标题和日期都会在页面上对齐。

此字符串将更新Treeview节点文本。

3 个答案:

答案 0 :(得分:3)

考虑使用composite formatting,特别是格式字符串的对齐参数。

  

可选对齐组件是一个有符号整数,表示首选的格式化字段宽度。如果alignment的值小于格式化字符串的长度,则忽略alignment,并将格式化字符串的长度用作字段宽度。如果对齐为正,则字段中的格式化数据右对齐,如果对齐为负,则对齐左对齐。如果需要填充,则使用空格。如果指定了对齐,则需要逗号。

var s="";
foreach (var item in col) {
    s += String.Format("Record[{0,-6}]    Title: {1,-15}    Date: {2}", item.ID, item.Title, item.Date);
}

使用StringBuilder效率的示例:

var sb = new StringBuilder();
foreach (var item in col) {
    sb.AppendFormat("Record[{0,-6}]    Title: {1,-15}    Date: {2}", item.ID, item.Title, item.Date);
}

答案 1 :(得分:1)

您可以使用PadRight()来确保您的第一个字符串具有正确的长度:

var record = "Record[1]";
var title = "Title : xxxxxx Date : dd/mm/yy .";

var output = record.PadRight(25) + title;

答案 2 :(得分:1)

这对我有用:

var paddingRecord = items.Select(x => x.Record.ToString().Length).Max();
var paddingTitle = items.Select(x => x.Title.Length).Max();

var result =
    String.Join(Environment.NewLine,
        items.Select(x =>
            String.Format(
                "Record[{0}]{1} Title : {2}{3} Date : {4:dd/MM/yy}",
                x.Record,
                "".PadLeft(paddingRecord - x.Record.ToString().Length),
                x.Title,
                "".PadLeft(paddingTitle - x.Title.Length),
                x.Date)));

我为result得到了这个:

Record[1]    Title : Foo     Date : 23/05/14
Record[1000] Title : Foo Bar Date : 23/05/14