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

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

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

使用.replace方法

Line.Replace("\n", "whatever you want to replace with");

当我想为字符串插入新行,但不想从字符串中删除所有新行时,我会使用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);
应该让您开始…

使用replace with Environment.NewLine


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

如果您的代码应该运行在不同的环境中,我会考虑使用Engest.Netring常量,因为它是特定环境中使用的换行符

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\n和\r\n分隔,因此首先将\r和\r\n替换为\n,然后才拆分数据字符串

以下行应转到parseCSV方法:


要确保所有可能的换行方式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 call.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.getPropertyline.separator是了解C中对应项的珍品。你的帖子帮助了我。可能是重复的,你需要将它重新分配回原始变量,因为替换没有发生。@driss我想知道如何进行当您不知道文件来自哪个系统时,请选择正确的新行常量。。。这个解决方案似乎真的是通用的。在C语言中不可能有空字符这样的东西。“\0”会起作用吗?@Shevek-只是使用了错误的引号。在我回答这个问题的那天,一定做了相当多的javascript。@Califf-它是等效的,而不是更好。你在这里犯的错误只是证明它更好。我工作过的大多数公司都有自己的编码标准——不使用硬编码文字。@如果我犯的错误不是在带有Intellisense的IDE中犯的,也不会编译。如果你觉得字符串.Empty更好,那就一定要使用它。当我想将检索到的网页代码折叠成一行以简化正则表达式模式时,这是唯一对我有效的方法。完全同意Brian R.Bondy的观点。Corin和upvoted提出的解决方案非常幼稚,至少是这样。首先,我更喜欢环境,但如果
ing不是来自于它运行的系统,它不会工作+1序列号行。替换\n,替换为。替换\r,替换为;够了吗?没有,因为如果您有\r\n替换字符串,您将得到两次-不理想。您不需要字符串文本吗?string removedBreaks=Line.Replace@\r\n,replaceWith.Replace@\n,replaceWith.Replace@\r,replaceWith@ShawnDotey不需要,我们想替换控制字符,而不是反斜杠和字母序列。首先,它对我不起作用。经过一些研究,我找到了解决办法:我必须使用“使用系统”或“System.Environment.NewLine”未删除所有换行符。请尝试此字符串\n\r\n我的消息\r\n\n\r\n是这样的。\n\n\r\n一般来说,我喜欢此解决方案。但是,请注意,即使在同一操作系统上,实际换行符也可能不匹配。这就是为什么处理返回SQL的原因。新行为\n,而Environment.NewLine为\r\n。结果是没有匹配任何内容,因此保留了新行。@Dono>SQL数据来自哪里?可能来自以UNIX方式处理新行的外部源代码。这是数据格式的问题,而不是OS或此方法的问题…这应该是String类的静态方法之一。NET本身应该能够检测字符串中源换行符的格式,并将其转换为Environment.NewLine\r\n格式…所以您说使用Regex.Replaceinput、@[\r\n]+、replacementString不能完成相同的任务?@flamebaud否,如果一行中有多个换行符,则会产生不同的结果\r\n?|\n将替换每个换行符,[\r\n]+将对任意数量的换行符执行单个替换。对于那些担心多个换行符的人:/\r\n?|\n/gm如果要删除可能来自不同操作系统的字符串中的换行符,这实际上是正确的解决方案。JSON格式就是一个很好的例子+1如果未使用逐字字符串@prefix,则在使用该字符串的任何位置都需要在一行中使用两个反斜杠,因此上面@mark_byers的答案仍然正确。@prefix使反斜杠成为字符串的一部分,正则表达式必须使用反斜杠作为转义字符。在大多数情况下,这是替换新行的最佳答案。感谢这段有用的示例代码。我是通过这个sytnax修复的:Regex.Replacestr,@[\r\n]+,-这就是我要找的
string ReplacementString = "";

Regex.Replace(strin.Replace(System.Environment.NewLine, ReplacementString), @"(\r\n?|\n)", ReplacementString);
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);