3

所以我正在格式化一个字符串,我需要把它排成一个表,但是这个字符串的字符数不确定。无论如何让字符串在每列的同一位置?到目前为止,我有:

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

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

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

4

3 回答 3

5

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

于 2012-12-24T15:30:43.513 回答
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);
于 2012-12-24T15:38:55.483 回答
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”+ ...)。改用 a StringBuilder。它效率更高。

于 2012-12-24T15:40:52.423 回答