如何在C#中替换字符串中的换行符?
使用替换 Environment.NewLine
myString = myString.Replace(System.Environment.NewLine, "replacement text")
正如其他帖子中提到的,如果字符串来自另一个环境(OS),那么您需要替换新线控制字符的特定环境实现.
到目前为止发布的解决方案要么只替换,Environment.NewLine
要么如果替换字符串包含换行符,则会失败,因为它们string.Replace
多次调用.
这是一个解决方案,它使用正则表达式在字符串的一次传递中进行所有三次替换.这意味着替换字符串可以安全地包含换行符.
string result = Regex.Replace(input, @"\r\n?|\n", replacementString);
要扩展The.Anyi.9的答案,您还应该了解一般使用的不同类型的换行符.根据您的文件来源,您可能需要考虑确保捕获所有替代品......
string replaceWith = ""; string removedBreaks = Line.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);
应该让你去...
当我想为字符串插入换行符时,我会使用Environment.Newline,但是不要从字符串中删除所有换行符.
根据您的平台,您可以使用不同类型的换行符,但即使在同一平台内,也经常使用不同类型的换行符.特别是在处理文件格式和协议时.
string ReplaceNewlines(string blockOfText, string replaceWith) { return blockOfText.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith); }
如果您的代码应该在不同的环境中运行,我会考虑使用Environment.NewLine
常量,因为它特别newline
适用于特定环境.
line = line.Replace(Environment.NewLine, "newLineReplacement");
但是,如果从源自另一个系统的文件中获取文本,则这可能不是正确的答案,您应该替换为在另一个系统上使用的任何换行常量.它通常是\n
或\r\n
.
不要忘记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 ); } }
要确保替换所有可能的换行方式(Windows,Mac和Unix),您应该使用:
string.Replace("\r\n", "\n").Replace('\r', '\n').Replace('\n', 'replacement');
并且按此顺序,当你找到一些行结束字符的组合时,不要进行额外的换行符.
我需要\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; }
为什么不同时?
string ReplacementString = ""; Regex.Replace(strin.Replace(System.Environment.NewLine, ReplacementString), @"(\r\n?|\n)", ReplacementString);
注意:用strin
输入字符串的名称替换。
如果您想“清理”新行,使用正则表达式的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 } }