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个空格(在注释中格式不正确)。是的,不,您必须自己添加空格。@在缩进文本编写器的帮助下,您仍然可以“自己做”吗