Answers:
使用替换为 Environment.NewLine
myString = myString.Replace(System.Environment.NewLine, "replacement text"); //add a line terminating ;
如其他文章所述,如果字符串来自其他环境(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);
应该让你走...
Line.Replace("\n", replaceWith).Replace("\r", replaceWith);
不够吗
\r\n
您将得到两次替换字符串-不理想。
当我想为字符串插入换行符,而不是从字符串中删除所有换行符时,我将使用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的方法(可能是作为扩展方法包装),我会使用@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 );
}
}
''
在C#中使用-没有空字符。会'\0'
代替吗?
string.Empty
更好,请务必使用它。
为确保所有可能的换行方式(Windows,Mac和Unix)均已替换,您应使用:
string.Replace("\r\n", "\n").Replace('\r', '\n').Replace('\n', 'replacement');
并且按照这种顺序,当您发现行尾字符的某种组合时,不要进行额外的换行。
如果您想“清理”新行,使用正则表达式的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
}
}
我需要\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 s = Regex.Replace(source_string, "\n", "\r\n");
要么
string s = Regex.Replace(source_string, "\r\n", "\n");
取决于您要走的路。
希望能有所帮助。
另一个选择是StringReader
在相关字符串上创建一个over。在阅读器上,.ReadLine()
循环执行。然后,无论它们具有什么分隔符(一致或不一致),都可以将行分隔开。这样,您就可以继续进行;一种可能性是使用StringBuilder
和呼叫.AppendLine
。
好处是,您让框架决定什么构成“换行符”。
如果只想替换换行符:
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);