如何在c#中替换字符串中的换行符?


当前回答

如果你想“清除”新行,flamebaud注释使用regex @“[\r\n]+”是最好的选择。

using System;
using System.Text.RegularExpressions;

class MainClass {
  public static void Main (string[] args) {
    string str = "AAA\r\nBBB\r\n\r\n\r\nCCC\r\r\rDDD\n\n\nEEE";

    Console.WriteLine (str.Replace(System.Environment.NewLine, "-"));
    /* Result:
    AAA
    -BBB
    -
    -
    -CCC


    DDD---EEE
    */
    Console.WriteLine (Regex.Replace(str, @"\r\n?|\n", "-"));
    // Result:
    // AAA-BBB---CCC---DDD---EEE

    Console.WriteLine (Regex.Replace(str, @"[\r\n]+", "-"));
    // Result:
    // AAA-BBB-CCC-DDD-EEE
  }
}

其他回答

将replace替换为Environment。换行符

myString = myString.Replace(System.Environment.NewLine, "replacement text"); //add a line terminating ;

正如在其他文章中提到的,如果字符串来自另一个环境(OS),那么您需要替换特定环境的新行控制字符实现。

扩展The.Anyi。9的答案,你也应该知道一般使用的不同类型的换行符。根据文件的来源,您可能希望确保捕获所有替代选项…

string replaceWith = "";
string removedBreaks = Line.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);

应该能让你继续…

我需要将\r\n替换为实际的回车和换行,并将\t替换为实际的制表符。所以我想到了以下几点:

public string Transform(string data)
{
    string result = data;
    char cr = (char)13;
    char lf = (char)10;
    char tab = (char)9;

    result = result.Replace("\\r", cr.ToString());
    result = result.Replace("\\n", lf.ToString());
    result = result.Replace("\\t", tab.ToString());

    return result;
}

不要忘记replace不会在字符串中进行替换,而是返回一个替换了字符的新字符串。下面将删除换行符(而不是替换它们)。如果用其他方法替换它们,我将使用@Brian R. Bondy的方法,可能包装为扩展方法。记住,在调用Replace或提供的扩展方法之前,首先检查空值。

string line = ...

line = line.Replace( "\r", "").Replace( "\n", "" );

作为扩展方法:

public static class StringExtensions
{
   public static string RemoveLineBreaks( this string lines )
   {
      return lines.Replace( "\r", "").Replace( "\n", "" );
   }

   public static string ReplaceLineBreaks( this string lines, string replacement )
   {
      return lines.Replace( "\r\n", replacement )
                  .Replace( "\r", replacement )
                  .Replace( "\n", replacement );
   }
}

安全替换换行符的最好方法是

yourString.Replace("\r\n","\n") //handling windows linebreaks
.Replace("\r","\n")             //handling mac linebreaks

这将产生一个只有\n(如换行)作为换行符的字符串。 这段代码对于修复混合换行也很有用。