C#在字符串中的某个位置插入多行文字

时间:2015-09-30 20:37:21

标签: c# string append stringbuilder

我有一个多行字符串,我想附加一些多行文字和 保留附加的文本行的缩进。一个例子可能更好地解释了这个问题:

StringBuilder sb = new StringBuilder();
int int1 = 50000;
double double1 = 5800.0;
string test = "Test\r\nSome\r\nMultiline\r\nstuff.";
sb.AppendFormat("{0,8};{1,8};{2}",int1,double1,test);
Console.Write(sb.ToString());

这会给我输出

50000;    5800;Test
Some
Multiline
stuff.

然而,我希望获得的是

50000;    5800;Test
               Some
               Multiline
               stuff.

我知道有办法通过编写自己的功能来处理这个问题,但是我希望StringBuilder类或类似的构造可以帮助我。

3 个答案:

答案 0 :(得分:1)

您可以使用System.CodeDom.Compiler.IndentedTextWriter轻松解决问题。无论如何,如果你必须经常生成源代码,那么值得了解这种类型。

最后,它也是一个System.Text.StringBuilder,正如演示代码所示:

static void Bar()
{
    int int1 = 50000;
    double double1 = 5800.0;
    string test = "Test\r\nSome\r\nMultiline\r\nstuff.";

    StringBuilder sb = new StringBuilder();
    StringWriter writer = new StringWriter(sb);
    IndentedTextWriter itw = new IndentedTextWriter(writer, new string(' ', 18));
    itw.Write("{0,8};{1,8};", int1, double1);
    itw.Indent++;
    test.Split(new char[] { '\n' }).All(s => { itw.WriteLine(s); return true; });
    Console.Write(sb.ToString());
}

答案 1 :(得分:0)

就像评论所说的那样,你大部分时间都要写自己的。但是代码不多:

        var sb = new StringBuilder();
        int int1 = 50000;
        double double1 = 5800.0;
        sb.AppendFormat("{0,8};{1,8};");
        var indentation = "".PadLeft(sb.Length);
        var test = "Test\r\nSome\r\nMultiline\r\nstuff.";
        var testLines = test.Split(new[] { "\r\n" }, StringSplitOptions.None);
        for (int i=0; i<testLines.Length;i++)
        {
            if (i > 0)
            {
                sb.AppendFormat("{0}{1}", "\r\n", indentation);
            }
            sb.Append(testLines[i]);
        }
        return sb.ToString();

你可以做一些其他的东西,但是如果你有一个动态的缩进长度,你必须建立你的格式字符串,以包括缩进量,这似乎比它对我的努力更值得。

答案 2 :(得分:-1)

代码:

Console.WriteLine("-------------------------------");
Console.WriteLine("First Name | Last Name  |   Age");
Console.WriteLine("-------------------------------");
Console.WriteLine(String.Format("{0,-10} | {1,-10} | {2,5}", "Bill", "Gates", 51));
Console.WriteLine(String.Format("{0,-10} | {1,-10} | {2,5}", "Edna", "Parker", 114));
Console.WriteLine(String.Format("{0,-10} | {1,-10} | {2,5}", "Johnny", "Depp", 44));
Console.WriteLine("-------------------------------");

输出:

-------------------------------
First Name | Last Name  |   Age
-------------------------------
Bill       | Gates      |    51
Edna       | Parker     |   114
Johnny     | Depp       |    44
-------------------------------

源:

http://www.csharp-examples.net/align-string-with-spaces/