如何在字符串中插入换行符?

在.NET 中,我可以同时提供 \r\n字符串文字,但是有一种方法可以插入 类似“新行”的特殊字符,如 Environment.NewLine静态属性?

547847 次浏览

简单的选择是:

  • 返回文章页面

    string x = string.Format("first line{0}second line", Environment.NewLine);
    
  • String concatenation:

    string x = "first line" + Environment.NewLine + "second line";
    
  • String interpolation (in C#6 and above):

    string x = $"first line{Environment.NewLine}second line";
    

You could also use \n everywhere, and replace:

string x = "first line\nsecond line\nthird line".Replace("\n",
Environment.NewLine);

请注意,您不能将其设置为字符串 不变,因为 Environment.NewLine的值只在执行时可用。

var sb = new StringBuilder();
sb.Append(first);
sb.AppendLine(); // which is equal to Append(Environment.NewLine);
sb.Append(second);
return sb.ToString();
static class MyClass
{
public const string NewLine="\n";
}


string x = "first line" + MyClass.NewLine + "second line"

如果你想要一个包含 Environment. NewLine 的常量字符串,你可以这样做:

const string stringWithNewLine =
@"first line
second line
third line";

剪辑

由于这是在一个常量字符串中,它是在编译时完成的,因此它是编译器对换行符的解释。我似乎找不到一个参考解释这种行为,但是,我可以证明它的工作原理。我在 Windows 和 Ubuntu (使用 Mono)上编译了这段代码,然后反汇编,结果如下:

Disassemble on Windows Disassemble on Ubuntu

正如你所看到的,在 Windows 中换行符被解释为 r n,在 Ubuntu 中被解释为 n

另一种方便放置 Environment. NewLine 格式化字符串的方法。 其思想是创建字符串扩展方法,该方法像往常一样格式化字符串,但也将文本中的{ nl }替换为 Environment。新线

用法

   " 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);
}

注意

  1. 如果希望 ReSharper 突出显示参数,请向上面的方法添加属性

    [ StringFormatMethod (“ format”)]

  2. 这个实现显然不如 String.Format 有效

  3. 也许对这个问题感兴趣的人也会对下一个问题感兴趣: C #

    命名字符串格式
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>";

如果您真的希望 New Line 字符串作为常量,那么可以这样做:

public readonly string myVar = Environment.NewLine;

C # 中 readonly 关键字的用户意味着这个变量只能被赋值一次。您可以找到有关它的文档 给你。它允许声明一个常量变量,其值直到执行时才知道。

我更喜欢“蟒蛇式”

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"得到下面的 textbox中的新行。我的例子奏效了

   string s1 = comboBox1.Text;     // s1 is the variable assigned to box 1, etc.
string s2 = comboBox2.Text;


string both = s1 + "\r\n" + s2;
textBox1.Text = both;

典型的答案可能是 s1text box中使用定义的类型样式的 s2

更新。Net 版本允许在文字前面使用 $,它允许在内部使用变量,如下所示:

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 />")

这里,环境部,新线没用。

我把“ < em > br/”放在一个字符串里,然后开始工作。

例如:

文本 = “第一行。 < Br/ > 第二行。”;