将一个可变数量的空格插入一个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"; }