Replace Line Breaks in a String C#
如何替换C中字符串中的换行符?
用
1 | myString = myString.Replace(System.Environment.NewLine,"replacement text") |
正如其他文章中提到的,如果字符串来自另一个环境(OS),那么您需要替换新行控制字符的特定环境实现。
到目前为止发布的解决方案要么只替换
这里有一个解决方案,它使用一个正则表达式在字符串的一次传递中完成所有三个替换。这意味着替换字符串可以安全地包含换行符。
1 2 3 4 | string result = Regex.Replace(input, @" ?| ", replacementString); |
为了扩展.anyi.9的答案,您还应该了解一般使用的不同类型的换行符。根据文件的来源,您可能希望查看以确保捕获所有备选方案…
1 2 3 4 5 6 | string replaceWith =""; string removedBreaks = Line.Replace(" ", replaceWith).Replace(" ", replaceWith).Replace(" ", replaceWith); |
你应该去…
当我想为一个字符串插入新行,但不想从一个字符串中删除所有新行时,我将使用environment.newline。
根据平台的不同,您可以使用不同类型的换行符,但即使在同一平台内,通常也会使用不同类型的换行符。尤其是在处理文件格式和协议时。
1 2 3 4 5 6 7 8 | string ReplaceNewlines(string blockOfText, string replaceWith) { return blockOfText.Replace(" ", replaceWith).Replace(" ", replaceWith).Replace(" ", replaceWith); } |
如果您的代码应该在不同的环境中运行,我会考虑使用
1 | line = line.Replace(Environment.NewLine,"newLineReplacement"); |
但是,如果您从源自另一个系统的文件中获取文本,这可能不是正确的答案,您应该用另一个系统上使用的换行常量替换它。它通常是
。
别忘了replace不会在字符串中进行替换,但会返回一个新字符串,其中包含被替换的字符。以下内容将删除换行符(而不是替换它们)。如果用其他方法替换它们,我将使用@brian r.bondy的方法,可能包装成扩展方法。请记住,在调用replace或提供的扩展方法之前,首先检查是否有空值。
1 2 3 4 5 | string line = ... line = line.Replace(" ","").Replace(" ","" ); |
作为扩展方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public static class StringExtensions { public static string RemoveLineBreaks( this string lines ) { return lines.Replace(" ","").Replace(" ","" ); } public static string ReplaceLineBreaks( this string lines, string replacement ) { return lines.Replace(" ", replacement ) .Replace(" ", replacement ) .Replace(" ", replacement ); } } |
要确保替换所有可能的换行方式(Windows、Mac和Unix),应使用:
1 2 3 4 5 6 7 | string.Replace(" "," ").Replace(' ', ' ').Replace(' ', 'replacement'); |
按照这个顺序,当你找到一些行尾字符的组合时,不要做额外的换行。
我需要用实际的回车和换行替换
,用实际的制表符替换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public string Transform(string data) { string result = data; char cr = (char)13; char lf = (char)10; char tab = (char)9; result = result.Replace("\ ", cr.ToString()); result = result.Replace("\ ", lf.ToString()); result = result.Replace("\\t", tab.ToString()); return result; } |
为什么不是两者兼而有之?
1 2 3 4 5 6 | string ReplacementString =""; Regex.Replace(strin.Replace(System.Environment.NewLine, ReplacementString), @"( ?| )", ReplacementString); |
注意:用输入字符串的名称替换
如果您想"清理"新的行,最好选择使用regex
]+"的flamebaud注释。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | using System; using System.Text.RegularExpressions; class MainClass { public static void Main (string[] args) { string str ="AAA BBB CCC DDD EEE"; Console.WriteLine (str.Replace(System.Environment.NewLine,"-")); /* Result: AAA -BBB - - -CCC DDD---EEE */ Console.WriteLine (Regex.Replace(str, @" ?| ","-")); // Result: // AAA-BBB---CCC---DDD---EEE Console.WriteLine (Regex.Replace(str, @"[ ]+","-")); // Result: // AAA-BBB-CCC-DDD-EEE } } |
1 2 3 | var answer = Regex.Replace(value,"( | )+", replacementString); |
使用.replace()方法
1 2 | Line.Replace(" ","whatever you want to replace with"); |
安全替换换行符的最佳方法是
1 2 3 4 5 6 7 | yourString.Replace(" "," ") //handling windows linebreaks .Replace(" "," ") //handling mac linebreaks |
它应该产生一个只有(例如linefeed)作为换行符的字符串。此代码也可用于修复混合换行符。
由于新行可以用
分隔,所以我们先用
,然后再拆分数据字符串。
以下行应转到
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | function parseCSV(data) { //alert(data); //replace UNIX new lines data = data.replace(/ /g," "); //replace MAC new lines data = data.replace(/ /g," "); //split into rows var rows = data.split(" "); } |
另一种选择是在所讨论的字符串上创建一个
其优点是,您可以让框架决定什么是"换行符"。
1 2 3 4 | string s = Regex.Replace(source_string," "," "); |
或
1 2 3 4 | string s = Regex.Replace(source_string," "," "); |
取决于你想走哪条路。
希望能有所帮助。