Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#在字符串中的特定位置插入多行文本_C#_String_Append_Stringbuilder - Fatal编程技术网

C#在字符串中的特定位置插入多行文本

C#在字符串中的特定位置插入多行文本,c#,string,append,stringbuilder,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); Consol

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

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

代码:

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
-------------------------------
资料来源:

代码:

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
-------------------------------
资料来源:


正如评论所说,你大部分时间都得自己写。但代码并不多:

        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();
var sb=new StringBuilder();
int1=50000;
双双1=5800.0;
sb.AppendFormat(“{0,8};{1,8};”);
var.PadLeft(sb.长度);
var test=“test\r\n一些\r\n多行\r\nstuff。”;
var testLines=test.Split(新[]{“\r\n”},StringSplitOptions.None);
对于(int i=0;i 0)
{
sb.AppendFormat(“{0}{1}”,“\r\n”,缩进);
}
sb.追加(测试线[i]);
}
使某人返回字符串();

你可以做一些其他的事情,但是如果你有一个动态的缩进长度,你就必须构建格式字符串来包含缩进量,这对我来说似乎比它值得做的还要多。

正如评论所说,你将不得不自己写。但代码并不多:

        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();
var sb=new StringBuilder();
int1=50000;
双双1=5800.0;
sb.AppendFormat(“{0,8};{1,8};”);
var.PadLeft(sb.长度);
var test=“test\r\n一些\r\n多行\r\nstuff。”;
var testLines=test.Split(新[]{“\r\n”},StringSplitOptions.None);
对于(int i=0;i 0)
{
sb.AppendFormat(“{0}{1}”,“\r\n”,缩进);
}
sb.追加(测试线[i]);
}
使某人返回字符串();

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

你可以使用
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());
}

您可以使用
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());
}

使用
字符串。是否替换
\r\n
上的
以添加空格?像
test.Replace(“\r\n”,“\r\n”;
”?也就是说,在换行符前添加16个空格(在注释中格式不正确)。是的,不,你必须自己做。@你仍然可以在IndentedTextWriter()的帮助下“自己做”吗使用
String.Replace
\r\n
上添加空格?如
test.Replace(“\r\n”,“\r\n”;
?即,在换行符前添加16个空格(在注释中格式不正确)。是的,不,您必须自己添加空格。@在缩进文本编写器的帮助下,您仍然可以“自己做”吗