【问题标题】:C# Insert multiline text in string at certain positionC#在字符串中的某个位置插入多行文本
【发布时间】:2015-12-28 18:37:47
【问题描述】:

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

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 类或类似的构造可以帮助我。

【问题讨论】:

  • \r\n 上使用String.Replace 添加空格?喜欢test.Replace("\r\n", " \r\n";?即,在换行符之前添加 16 个空格(在 cmets 中看起来不正确)。
  • 是的,不,你必须自己做。
  • @在 IndentedTextWriter (msdn.microsoft.com/en-us/library/…) 的帮助下,您仍然可以“自己动手”吗

标签: c# string append stringbuilder


【解决方案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());
}

【讨论】:

    【解决方案2】:

    就像 cmets 所说的那样,您通常必须自己编写。虽然代码不多:

            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();
    

    你可以做一些其他的事情,但如果你有一个动态的缩进长度,你将不得不构建你的格式字符串来包含缩进量,这对我来说似乎比它值得付出更多的努力。

    【讨论】:

      【解决方案3】:

      代码:

      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/

      【讨论】:

        猜你喜欢
        • 2011-08-18
        • 1970-01-01
        • 1970-01-01
        • 2021-11-11
        • 2011-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-26
        相关资源
        最近更新 更多