.net 在字符串中插入可变数目的空格?(格式化输出文件)

owfi6suc  于 2022-12-24  发布在  .NET
关注(0)|答案(5)|浏览(228)

我正在从一个列表中获取数据,并将其导出到一个文本文件中。我已经完成了将其导出到CSV的功能,并且还想做一个纯文本版本。
因为标题和其他元素的长度是可变的,所以当保存文件并在记事本中打开时,它看起来像一团乱麻,因为没有任何东西排队。
我希望输出如下所示:

Sample Title One   Element One   Whatever Else
Sample Title 2     Element 2     Whatever Else
S. T. 3            E3            Whatever Else

我想我可以循环遍历每个元素,以获得最长元素的长度,这样我就可以计算要为每个剩余元素添加多少个空格。
我的主要问题是:* * 有没有一种优雅的方法可以将可变数量的字符添加到字符串中?**最好有这样的方法:第一个月
当然,我显然可以只写一个函数,通过循环来完成这个任务,但我想看看是否有更好的方法。

w46czmvw

w46czmvw1#

对于这个,您可能需要myString.PadRight(totalLength, charToInsert)
有关详细信息,请参见String.PadRight Method (Int32)

new9mtju

new9mtju2#

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

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

您也可以在插值字符串中指定字段的宽度:

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

正如您所知,您可以使用适当的字符串构造函数创建重复字符的字符串。

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

dba5bblo3#

使用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,负号保证字符串从左到右打印。

dl5txlt9

dl5txlt94#

为了好玩,下面是我在使用.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";
    }
laawzig2

laawzig25#

我同意Justin的观点,可以使用**ASCII codes here * a引用空格CHAR,字符编号32表示空格,因此:

string.Empty.PadRight(totalLength, (char)32);

**另一种方法:**在自定义方法中手动创建所有空格,并调用:

private static string GetSpaces(int totalLength)
    {
        string result = string.Empty;
        for (int i = 0; i < totalLength; i++)
        {
            result += " ";
        }
        return result;
    }

并在代码中调用它来创建白色:获取空间(14);

相关问题