How can I replace Line Breaks within a string in C#?
问题:
回答1:
Use replace with Environment.NewLine
myString = myString.Replace(System.Environment.NewLine, \"replacement text\")
As mentioned in other posts, if the string comes from another environment (OS) then you\'d need to replace that particular environments implementation of new line control characters.
回答2:
The solutions posted so far either only replace Environment.NewLine
or they fail if the replacement string contains line breaks because they call string.Replace
multiple times.
Here\'s a solution that uses a regular expression to make all three replacements in just one pass over the string. This means that the replacement string can safely contain line breaks.
string result = Regex.Replace(input, @\"\\r\\n?|\\n\", replacementString);
回答3:
To extend The.Anyi.9\'s answer, you should also be aware of the different types of line break in general use. Dependent on where your file originated, you may want to look at making sure you catch all the alternatives...
string replaceWith = \"\";
string removedBreaks = Line.Replace(\"\\r\\n\", replaceWith).Replace(\"\\n\", replaceWith).Replace(\"\\r\", replaceWith);
should get you going...
回答4:
I would use Environment.Newline when I wanted to insert a newline for a string, but not to remove all newlines from a string.
Depending on your platform you can have different types of newlines, but even inside the same platform often different types of newlines are used. In particular when dealing with file formats and protocols.
string ReplaceNewlines(string blockOfText, string replaceWith)
{
return blockOfText.Replace(\"\\r\\n\", replaceWith).Replace(\"\\n\", replaceWith).Replace(\"\\r\", replaceWith);
}
回答5:
If your code is supposed to run in different environments, I would consider using the Environment.NewLine
constant, since it is specifically the newline
used in the specific environment.
line = line.Replace(Environment.NewLine, \"newLineReplacement\");
However, if you get the text from a file originating on another system, this might not be the correct answer, and you should replace with whatever newline constant is used on the other system. It will typically be \\n
or \\r\\n
.
回答6:
Don\'t forget that replace doesn\'t do the replacement in the string, but returns a new string with the characters replaced. The following will remove line breaks (not replace them). I\'d use @Brian R. Bondy\'s method if replacing them with something else, perhaps wrapped as an extension method. Remember to check for null values first before calling Replace or the extension methods provided.
string line = ...
line = line.Replace( \"\\r\", \"\").Replace( \"\\n\", \"\" );
As extension methods:
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:
To make sure all possible ways of line breaks (Windows, Mac and Unix) are replaced you should use:
string.Replace(\"\\r\\n\", \"\\n\").Replace(\'\\r\', \'\\n\').Replace(\'\\n\', \'replacement\');
and in this order, to not to make extra line breaks, when you find some combination of line ending chars.
回答8:
I needed to replace the \\r\\n
with an actual carriage return and line feed and replace \\t
with an actual tab. So I came up with the following:
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:
var answer = Regex.Replace(value, \"(\\n|\\r)+\", replacementString);
回答10:
Why not both?
string ReplacementString = \"\";
Regex.Replace(strin.Replace(System.Environment.NewLine, ReplacementString), @\"(\\r\\n?|\\n)\", ReplacementString);
Note: Replace strin
with the name of your input string.
回答11:
Use the .Replace() method
Line.Replace(\"\\n\", \"whatever you want to replace with\");
回答12:
Best way to replace linebreaks safely is
yourString.Replace(\"\\r\\n\",\"\\n\") //handling windows linebreaks
.Replace(\"\\r\",\"\\n\") //handling mac linebreaks
that should produce a string with only \\n (eg linefeed) as linebreaks. this code is usefull to fix mixed linebreaks too.
回答13:
As new line can be delimited by \\n
, \\r
and \\r\\n
, first we’ll replace \\r
and \\r\\n
with \\n
, and only then split data string.
The following lines should go to the parseCSV
method:
function parseCSV(data) {
//alert(data);
//replace UNIX new lines
data = data.replace(/\\r\\n/g, \"\\n\");
//replace MAC new lines
data = data.replace(/\\r/g, \"\\n\");
//split into rows
var rows = data.split(\"\\n\");
}
回答14:
if you want to \"clean\" the new lines, flamebaud comment using regex @\"[\\r\\n]+\"
is the best choice.
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
}
}
回答15:
string s = Regex.Replace(source_string, \"\\n\", \"\\r\\n\");
or
string s = Regex.Replace(source_string, \"\\r\\n\", \"\\n\");
depending on which way you want to go.
Hopes it helps.
回答16:
Another option is to create a StringReader
over the string in question. On the reader, do .ReadLine()
in a loop. Then you have the lines separated, no matter what (consistent or inconsistent) separators they had. With that, you can proceed as you wish; one possibility is to use a StringBuilder
and call .AppendLine
on it.
The advantage is, you let the framework decide what constitutes a \"line break\".