如何在string文字中插入换行符?
在.NET中,我可以提供\r
或\n
string文字,但是有一种方法来插入像“新行”特殊字符像Environment.NewLine
静态属性?
那么简单的select是:
-
string.Format
:string x = string.Format("first line{0}second line", Environment.NewLine);
-
string连接:
string x = "first line" + Environment.NewLine + "second line";
-
string插值(在C#6及更高版本中):
string x = $"first line{Environment.NewLine}second line";
你也可以在任何地方使用\ n,并replace:
string x = "first line\nsecond line\nthird line".Replace("\n", Environment.NewLine);
请注意,您不能将此string设置为常量 ,因为Environment.NewLine
的值仅在执行时可用。
如果你想要一个包含Environment.NewLine的conststring,你可以这样做:
const string stringWithNewLine = @"first line second line third line";
编辑
由于这是一个常量string,因此它是在编译时完成的,因此它是编译器对新行的解释。 我似乎无法find解释这种行为的参考,但我可以certificate它的工作原理。 我编译了这个代码在Windows和Ubuntu(与单声道)然后反汇编,这些是结果:
正如你所看到的,在Windows中,换行符被解释为\ r \ n,在Ubuntu上被解释为\ n
var sb = new StringBuilder(); sb.Append(first); sb.AppendLine(); // which is equal to Append(Environment.NewLine); sb.Append(second); return sb.ToString();
Environment.NewLine方便放置在格式string中的另一种方法。 这个想法是创buildstring扩展方法,它像往常一样格式化string,但也用Environment.NewLinereplace文本中的{nl}
用法
" X={0} {nl} Y={1}{nl} X+Y={2}".FormatIt(1, 2, 1+2); gives: X=1 Y=2 X+Y=3
码
///<summary> /// Use "string".FormatIt(...) instead of string.Format("string, ...) /// Use {nl} in text to insert Environment.NewLine ///</summary> ///<exception cref="ArgumentNullException">If format is null</exception> [StringFormatMethod("format")] public static string FormatIt(this string format, params object[] args) { if (format == null) throw new ArgumentNullException("format"); return string.Format(format.Replace("{nl}", Environment.NewLine), args); }
注意
-
如果你想要ReSharper突出你的参数,添加属性到上面的方法
[StringFormatMethod( “格式化”)]
-
这个实现显然比String.Format效率低
-
也许一个对这个问题感兴趣的人也会对下一个问题感兴趣: 在C#中命名的string格式
string myText = @"<div class=""firstLine""></div> <div class=""secondLine""></div> <div class=""thirdLine""></div>";
不是这个:
string myText = @"<div class=\"firstLine\"></div> <div class=\"secondLine\"></div> <div class=\"thirdLine\"></div>";
static class MyClass { public const string NewLine="\n"; } string x = "first line" + MyClass.NewLine + "second line"
如果你真的想要新的string作为一个常量,那么你可以这样做:
public readonly string myVar = Environment.NewLine;
C#中readonly关键字的用户意味着这个variables只能被赋值一次。 你可以在这里find它的文档。 它允许声明一个常量variables,它的值在执行时间之前是未知的。
我更喜欢“pythonic方式”
List<string> lines = new List<string> { "line1", "line2", String.Format("{0} - {1} | {2}", someVar, othervar, thirdVar ) }; if(foo) lines.Add("line3"); return String.Join(Environment.NewLine, lines);
如果我理解这个问题:夫妇“\ r \ n”在文本框中获取下面的新行。 我的例子工作 –
strings1 = comboBox1.Text; // s1是分配给box 1的variables,等等。string s2 = comboBox2.Text;
string both = s1 +“\ r \ n”+ s2; textBox1.Text = both; 典型的答案可以是使用定义的types风格的文本框中的s1 s2。
较新的.net版本允许你在文字前面使用$,这允许你在里面使用variables,如下所示:
var x = $"Line 1{Environment.NewLine}Line 2{Environment.NewLine}Line 3";
如果你正在使用Web应用程序,你可以试试这个。
StringBuilder sb = new StringBuilder(); sb.AppendLine("Some text with line one"); sb.AppendLine("Some mpre text with line two"); MyLabel.Text = sb.ToString().Replace(Environment.NewLine, "<br />")
您可以在行中插入换行符HTML标记。 当浏览器呈现它时,你将有一个新的线。
string variable = "Line one Content" + "<br>" + "Line two Content";
这将呈现为:
Line one Content Line two Content
我没有find一个浏览器,这不工作。