C# 替换字符串C中的换行符#

C# 替换字符串C中的换行符#,c#,.net,string,C#,.net,String,如何在C#中替换字符串中的换行符?使用.replace()方法 当我想为字符串插入新行,但不想从字符串中删除所有新行时,我会使用Environment.Newline 根据您的平台,您可以使用不同类型的换行符,但即使在同一平台内,也经常使用不同类型的换行符。特别是在处理文件格式和协议时 string ReplaceNewlines(string blockOfText, string replaceWith) { return blockOfText.Replace("\r\n", re

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

使用.replace()方法


当我想为字符串插入新行,但不想从字符串中删除所有新行时,我会使用Environment.Newline

根据您的平台,您可以使用不同类型的换行符,但即使在同一平台内,也经常使用不同类型的换行符。特别是在处理文件格式和协议时

string ReplaceNewlines(string blockOfText, string replaceWith)
{
    return blockOfText.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);
}

为了扩展.Anyi.9的答案,您还应该了解。根据文件的来源,您可能希望查看以确保捕获所有备选方案

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

应该让您继续…

使用替换为
环境。换行符

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

其他帖子中提到的,如果字符串来自另一个环境(OS),则需要替换特定的环境实现。

如果您的代码应该运行在不同的环境中,我会考虑使用<代码>环境。因为它是专门在特定环境中使用的
换行符

line = line.Replace(Environment.NewLine, "newLineReplacement");

但是,如果从另一个系统上生成的文件中获取文本,这可能不是正确的答案,应该替换为另一个系统上使用的任何换行常量。它通常是
\n
\r\n

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

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(例如换行符)作为换行符的字符串。
此代码也可用于修复混合换行符。

我需要用实际回车和换行符替换
\r\n
,并用实际制表符替换
\t
。因此,我提出了以下建议:

var answer = Regex.Replace(value, "(\n|\r)+", replacementString);
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;
}

到目前为止发布的解决方案要么只替换
Environment.NewLine,要么在替换字符串包含换行符时失败,因为它们多次调用
string.replace

这里有一个解决方案,它使用正则表达式在一次遍历字符串的过程中进行所有三个替换。这意味着替换字符串可以安全地包含换行符

string result = Regex.Replace(input, @"\r\n?|\n", replacementString);

由于新行可以由
\n
\r
\r\n
分隔,因此首先我们将
\r
\r\n
替换为
\n
,然后才拆分数据字符串

以下行应转到
parseCSV
方法:

function parseCSV(data) {
    //alert(data);
    //replace UNIX new lines
    data = data.replace(/\r\n/g, "\n");
    //replace MAC new lines
    data = data.replace(/\r/g, "\n");
    //split into rows
    var rows = data.split("\n");
}

要确保所有可能的换行方式(Windows、Mac和Unix)都已更换,您应使用:

string.Replace("\r\n", "\n").Replace('\r', '\n').Replace('\n', 'replacement');
按照这个顺序,当你发现一些行尾字符的组合时,不要做额外的换行符。

为什么不能两者都做呢

string ReplacementString = "";

Regex.Replace(strin.Replace(System.Environment.NewLine, ReplacementString), @"(\r\n?|\n)", ReplacementString);

注意:用输入字符串的名称替换
strin

另一个选项是在有问题的字符串上创建一个字符串。在读卡器上,在循环中执行
.ReadLine()
。然后将行分隔开,不管它们使用了什么(一致或不一致)分隔符。有了它,你就可以随心所欲了;一种可能是使用and并在其上调用
.AppendLine

优点是,您可以让框架决定什么构成“换行符”。

如果您想“清理”新行,使用regex
@“[\r\n]+”
的flamebaud注释是最佳选择

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
  }
}

如果要仅替换换行符:

var input = @"sdfhlu \r\n sdkuidfs\r\ndfgdgfd";
var match = @"[\\ ]+";
var replaceWith = " ";
Console.WriteLine("input: " + input);
var x = Regex.Replace(input.Replace(@"\n", replaceWith).Replace(@"\r", replaceWith), match, replaceWith);
Console.WriteLine("output: " + x);
如果要替换换行符、制表符和空格:

var input = @"sdfhlusdkuidfs\r\ndfgdgfd";
var match = @"[\\s]+";
var replaceWith = "";
Console.WriteLine("input: " + input);
var x = Regex.Replace(input, match, replaceWith);
Console.WriteLine("output: " + x);

请告诉我们更多:什么是“断线”给你?你想用什么来代替它们呢?哈哈。我在java中检查时发现System.getProperty(“line.separator”)是了解C#中对应项的一个好方法。您的帖子对我很有帮助。可能是重复的,您需要将其重新分配回原始变量,因为替换未到位。@driss我想知道,当您不知道文件来自哪个系统时,如何选择正确的新行常量。。。这个解决方案似乎确实是通用的。C语言中不能有
'
——没有空字符这样的东西。
'\0'
会起作用吗?@Shevek——只是用了错误的引号。在我回答这个问题的那天,一定做了相当多的javascript。@Califf-它是等效的,而不是更好。你在这里犯的错误只是证明它更好。我工作过的大多数公司都有自己的编码标准——不使用硬编码文字。@如果我犯的“错误”不会出现在带有Intellisense的IDE中,也不会编译。如果您觉得
string.Empty
更好,请务必使用它。当我想将检索到的网页代码折叠为一行时(为了简化正则表达式模式),这是唯一对我有效的方法。完全同意Brian R.Bondy的观点。至少Corin和upvoted提供的解决方案非常幼稚。首先,我更喜欢环境方面的东西,但如果字符串不是来自其运行的系统,它就不会工作+1没有
行。替换(“\n”,替换为)。替换(“\r”,替换为)
够了吗?不,因为如果有
\r\n
您将得到两次替换字符串-这不理想。您不需要字符串文本吗?string removedBreaks=Line.Replace(@“\r\n”,replaceWith)。Replace(@“\n”,replaceWith)。Replace(@“\r”,replaceWith)@ShawnDotey不需要,我们想替换控制字符,而不是反斜杠和字母序列。首先,它对我不起作用。经过一些研究,我找到了解决办法:我必须使用“使用系统”或“System.Environment.NewLine”未删除
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
  }
}
var input = @"sdfhlu \r\n sdkuidfs\r\ndfgdgfd";
var match = @"[\\ ]+";
var replaceWith = " ";
Console.WriteLine("input: " + input);
var x = Regex.Replace(input.Replace(@"\n", replaceWith).Replace(@"\r", replaceWith), match, replaceWith);
Console.WriteLine("output: " + x);
var input = @"sdfhlusdkuidfs\r\ndfgdgfd";
var match = @"[\\s]+";
var replaceWith = "";
Console.WriteLine("input: " + input);
var x = Regex.Replace(input, match, replaceWith);
Console.WriteLine("output: " + x);