将一个可变数量的空格插入一个string? (格式化输出文件)

好吧,我正在从列表中获取数据,我将其填充到DataGridView,并将其导出到文本文件。 我已经完成了将其导出到CSV的function,并且还想做一个纯文本版本。

由于标题和其他元素的长度是可变的,当文件被保存,然后在记事本中打开它看起来像一团糟,因为没有排列。

我想要输出如下所示:

Sample Title One Element One Whatever Else Sample Title 2 Element 2 Whatever Else ST 3 E3 Whatever Else 

我想我可以遍历每个元素,以获得最长的一个长度,所以我可以计算多less个空间添加到每个剩余的元素。

我的主要问题是: 是否有一个优雅的方式来添加一个可变数量的字符到一个string? 有这样的事情会很高兴: myString.insert(index, charToInsert, howManyToInsert);

当然,我显然可以通过一个循环写一个函数来做到这一点,但我想看看是否有更好的方法来做到这一点。

提前致谢!

-Sootah

为此,您可能需要myString.PadRight(totalLength, charToInsert)

请参阅String.PadRight方法(Int32)以获取更多信息。

使用String.Format()TextWriter.Format() (取决于您如何实际写入文件)并指定字段的宽度。

 String.Format("{0,20}{1,15}{2,15}", "Sample Title One", "Element One", "Whatever Else"); 

您也可以指定插值string中字段的宽度:

 $"{"Sample Title One",20}{"Element One",15}{"Whatever Else",15}" 

只要你知道,你可以使用适当的string构造器来创build一个重复的string。

 new String(' ', 20); // string of 20 spaces 

使用String.Format

 string title1 = "Sample Title One"; string element1 = "Element One"; string format = "{0,-20} {1,-10}"; string result = string.Format(format, title1, element1); //or you can print to Console directly with //Console.WriteLine(format, title1, element1); 

格式为{0,-20}表示第一个参数的长度固定为20,负号表示从左到右打印string。

只是踢,这里是我写的function之前,我有.PadRight位:

  public string insertSpacesAtEnd(string input, int longest) { string output = input; string spaces = ""; int inputLength = input.Length; int numToInsert = longest - inputLength; for (int i = 0; i < numToInsert; i++) { spaces += " "; } output += spaces; return output; } public int findLongest(List<Results> theList) { int longest = 0; for (int i = 0; i < theList.Count; i++) { if (longest < theList[i].title.Length) longest = theList[i].title.Length; } return longest; } ////Usage//// for (int i = 0; i < storageList.Count; i++) { output += insertSpacesAtEnd(storageList[i].title, longest + 5) + storageList[i].rank.Trim() + " " + storageList[i].term.Trim() + " " + storageList[i].name + "\r\n"; }