带有未定义字符数的字符串格式

本文关键字:字符串 格式 字符 未定义 | 更新日期: 2023-09-27 17:49:30

所以我正在格式化一个字符串,我需要在一个表中排列它,但是这个字符串有一个不确定的字符数量。有没有办法让字符串在同一位置为每一列?到目前为止我有:

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

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

你知道我需要做什么吗?

带有未定义字符数的字符串格式

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

当您使用字符串时。格式项格式有以下语法:

{ 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);

首先要循环遍历每个条目以找到最大的条目,这样您就知道列的宽度,例如:

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代替。