具有未定义字符数的字符串格式c#

时间:2012-12-24 15:27:26

标签: c# string string-formatting

所以我正在设计格式化字符串,我需要在表格中排列,但是这个字符串的字符数不确定。反正是否有字符串在每列的相同位置?到目前为止我有:

ostring +=  "Notes\t\t" 
+ "       :  " 
+ employees[number].Notes 
+ "\t\t" 
+ employees[number].FirstNotes 
+ "\t\t" 
+ employees[number].SecondNotes;

我在其他行上使用了类似的方式,但它们有一个预先确定的数字位数,但不是这样我不能像我想的那样使用字符串修饰符。

关于我需要做什么的任何想法?

3 个答案:

答案 0 :(得分:5)

您可以使用String.PadRight()强制字符串为特定大小,而不是使用制表符。

答案 1 :(得分:2)

当您使用String.Format项目格式时,语法如下:

{ index[,alignment][ :formatString] }

因此,您可以指定对齐,该对齐指示插入参数的字段的总长度以及它是右对齐(正整数)还是左对齐(负整数)。

最好使用StringBuilder来构建字符串:

var builder = new StringBuilder();
var employee = employees[number];
builder.AppendFormat("Notes {0,20} {1,10} {2,15}", 
    employee.Notes, employee.FirstNotes, employee.SecondNotes);

答案 2 :(得分:0)

你首先必须遍历每个条目才能找到最大的条目,这样你就可以知道锄头的宽度如下:

var notesWidth = employees.Max(Notes.Length);
var firstNotesWidth = employees.Max(FirstNotes.Length);
// etc...

然后您可以将列填充到正确的宽度:

var output = new StringBuilder();
foreach(var employee in employees)
{
    output.Append(employee.Notes.PadRight(notesWidth+1));
    output.Append(employee.FirstNotes.PadRight(firstNotesWidth+1));
    // etc...
}

并且不要在循环中做很多字符串“添加”(“1”+“2”+“3”+ ...)。请改用StringBuilder。效率更高。