当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《替换字符串C#中的换行符》经验,为你挑选了10个好方法。

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



1> Corin Blaiki..:

使用替换 Environment.NewLine

myString = myString.Replace(System.Environment.NewLine, "replacement text")

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


总的来说,我喜欢这个解决方案.但请注意,即使在相同的操作系统上,实际换行也可能不匹配.这件事发生在我处理返回SQL的原因上.新行是\n,而Environment.NewLine是\ r \n.结果是没有任何东西匹配,所以新线仍然存在.
没有删除所有换行符.试试这个字符串**"\n\r \n我的消息\ r \n \n\r \n是这个.\n \n\r \n"**
首先,它对我不起作用.经过一些研究,我找到了解决方案:我不得不使用'使用系统;' 或'System.Environment.NewLine'

2> Mark Byers..:

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

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

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


@flamebaud不,如果一行中有多个换行符,则会产生不同的结果."\ r \n?| \n"将替换每个换行符,而"[\ r \n] +"将替换任意数量的换行符.
如果要删除可能来自不同操作系统的字符串中的换行符,这实际上是正确的解决方案.好的例子是JSON格式化.+1
所以你说Regex.Replace(输入,@"[\ r \n] +",replacementString)不能完成同样的任务吗?

3> ZombieSheep..:

要扩展The.Anyi.9的答案,您还应该了解一般使用的不同类型的换行符.根据您的文件来源,您可能需要考虑确保捕获所有替代品......

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

应该让你去...


首先,我更喜欢环境,但如果字符串不是来自它运行的系统,它就不会工作.+1
不,因为如果你有`\ r \n`,你最终会得到两次替换字符串 - 不理想.
@ShawnDotey不需要,我们要替换控制字符,而不是反斜杠和字母序列。

4> Brian R. Bon..:

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

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

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



5> driis..:

如果您的代码应该在不同的环境中运行,我会考虑使用Environment.NewLine常量,因为它特别newline适用于特定环境.

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

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



6> tvanfosson..:

不要忘记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 );
   }
}


你在这里犯的错误证明它更好.我工作过的大多数公司都有编码标准 - 不要使用硬编码的标准.

7> Dominik Szym..:

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

string.Replace("\r\n", "\n").Replace('\r', '\n').Replace('\n', 'replacement');

并且按此顺序,当你找到一些行结束字符的组合时,不要进行额外的换行符.



8> 小智..:

我需要\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;
}



9> RAY..:

为什么不同时?

string ReplacementString = "";

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

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



10> ewwink..:

如果您想“清理”新行,使用正则表达式的Flamebaud注释@"[\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
  }
}

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有