如何使用string.Format()函数在C#中对字符串进行对齐?

6

输出结果为Word文档(docx)。

我想使用C# 4.0的string.Format方法生成如下所示的输出:

string1: stringValue1,  string2:stringValue2
string4: stringValue4,  string5:stringValue5
string6: stringValue6,  string7:stringValue7
string8: stringValue8,  string9:stringValue9

我正在使用string.Format("{0,-10} {1,-10}",string1,string2),但它没有任何作用。有没有一种方法可以使用string.Format()对齐字符串?我看到了'\t'的解决方案,但如何将其添加到string.Format()中?
这是我的代码和输出:
string titel = HttpUtility.HtmlEncode(docItem.Title);
                    string href = docItem.FullURL;
                    string title = string.Format("{0}", titel);
                    string author = docItem.Author;
                    string date = docItem.ChangedDate.Date.ToShortDateString();
                    CreateTextBoxConentParagraph(doc, string.Format("Title: <a href='{0}'>{1}</a> Author: {2} Geändert an: {3}",href,title.PadRight(20),author.PadRight(20), date),string.Format("chunkId_{0}", i++));

输出: 标题:作者:aaa 修改日期:2013年4月19日

标题:第二 作者:aaa 修改日期:2013年4月18日

标题:slika 作者:aaa 修改日期:2013年4月18日

标题:dm 作者:aaa 修改日期:2013年4月18日

标题:马蒂亚斯 作者:aaa 修改日期:2013年4月19日

标题:QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQqq 作者:aaa 修改日期:2013年4月19日


如果您能发布一下您尝试过的内容会很有帮助。老实说,甚至不清楚您想要什么。请验证您发布的所有代码,因为string.Fornmat并不存在。 - Security Hound
1
什么类型的应用程序/控件?对于控制台应用程序、WinForm或Web应用程序,答案都不一样... - Raphaël Althaus
计算您想要显示的所有字符串的最大长度(在一列中),然后在显示时相应地使用PadLeft或PadRight。 - Corak
@RaphaëlAlthaus 确实 - 似乎每个人都回答得好像输出将进入具有等宽字体的控制台... 对于使用比例字体的输出,这些答案都不起作用。 - Matthew Watson
1
哦,好的。但是那么你应该有其他种类的表结构可用。如果使用可变宽度字体,仅通过添加或删除空格来使输出“看起来好看”几乎是不可能的。 - Corak
显示剩余7条评论
5个回答

10
尝试使用PadLeftPadRight方法。例如:
string.Format("{0} {1}",string1.PadRight(25),string2.PadRight(25)) 

此外,您还可以使用字符来填充空格。来自MSDN

string str = "forty-two";
char pad = '.';
Console.WriteLine(str.PadRight(15, pad));    // Displays "forty-two......".
Console.WriteLine(str.PadRight(2,  pad));    // Displays "forty-two".

4

像这样格式化值是没问题的,但你需要指定一个比字符串更长的长度,否则它不会添加任何空格。

然而,如果你想在一个值后面加上逗号并添加填充,则需要将逗号放在该值中然后进行格式化。

示例:

string string1 = "asdf";
string string2 = "ffs";
string string3 = "What about me?";
string string4 = "gahah";
string string5 = "kjshdfkjh";
string string6 = "fg";
string string7 = "kkkdd";
string string8 = "asdasdf";
string string9 = "jjfjj";

Console.WriteLine(String.Format("string1: {0,-10} string2: {1,-10}", string1 + ",", string2));
Console.WriteLine(String.Format("string4: {0,-10} string5: {1,-10}", string4 + ",", string5));
Console.WriteLine(String.Format("string6: {0,-10} string7: {1,-10}", string6 + ",", string7));
Console.WriteLine(String.Format("string8: {0,-10} string9: {1,-10}", string8 + ",", string9));

输出:

string1: asdf,      string2: ffs
string4: gahah,     string5: kjshdfkjh
string6: fg,        string7: kkkdd
string8: asdasdf,   string9: jjfjj

2
下面示例的重要部分是:
String.Format("{0,-12}{1,8}{2,12}{1,8}{2,12}{3,14}\n",
                                      "City", "Year", "Population", "Change (%)")

请看下面这个 MSDN 的示例:
public static void Main()
    {
        // Create array of 5-tuples with population data for three U.S. cities, 1940-1950.
        Tuple<string, DateTime, int, DateTime, int>[] cities = 
      { Tuple.Create("Los Angeles", new DateTime(1940, 1, 1), 1504277, 
                     new DateTime(1950, 1, 1), 1970358),
        Tuple.Create("New York", new DateTime(1940, 1, 1), 7454995, 
                     new DateTime(1950, 1, 1), 7891957),  
        Tuple.Create("Chicago", new DateTime(1940, 1, 1), 3396808, 
                     new DateTime(1950, 1, 1), 3620962),  
        Tuple.Create("Detroit", new DateTime(1940, 1, 1), 1623452, 
                     new DateTime(1950, 1, 1), 1849568) };

        // Display header 
        string header = String.Format("{0,-12}{1,8}{2,12}{1,8}{2,12}{3,14}\n",
                                      "City", "Year", "Population", "Change (%)");
        Console.WriteLine(header);
        string output;
        foreach (var city in cities)
        {
            output = String.Format("{0,-12}{1,8:yyyy}{2,12:N0}{3,8:yyyy}{4,12:N0}{5,14:P1}",
                                   city.Item1, city.Item2, city.Item3, city.Item4, city.Item5,
                                   (city.Item5 - city.Item3) / (double)city.Item3);
            Console.WriteLine(output);
        }
    }

1
如果您要编写DOCX格式文档,您应该使用Office Open XML格式。(此外在此处查看更多详情。)
然后,为了以表格形式对齐数据,您应该在文档中插入一个表格,并填充所需的数据。 这里是一些示例代码,演示如何以编程方式将表格插入DOCX文件中。
您应该能够隐藏表格的边框,以便只剩下表格单元格中的文本可见。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接