关于.net:替换字符串C#中的换行符

Replace Line Breaks in a String C#

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


Environment.NewLine替换

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

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


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

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

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);
}


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

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');

按照这个顺序,当你找到一些行尾字符的组合时,不要做额外的换行。


我需要用实际的回车和换行替换

,用实际的制表符替换\t。所以我想到了以下几点:

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);

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


如果您想"清理"新的行,最好选择使用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)作为换行符的字符串。此代码也可用于修复混合换行符。


由于新行可以用

分隔,所以我们先用
替换

,然后再拆分数据字符串。

以下行应转到parseCSV方法:

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("
"
);
}

另一种选择是在所讨论的字符串上创建一个StringReader。在阅读器上,循环执行.ReadLine()。然后将行分隔开,不管它们有什么分隔符(一致的或不一致的)。这样,您就可以按自己的意愿继续;一种可能是使用StringBuilder并在其上调用.AppendLine

其优点是,您可以让框架决定什么是"换行符"。


1
2
3
4
string s = Regex.Replace(source_string,"
"
,"

"
);

1
2
3
4
string s = Regex.Replace(source_string,"

"
,"
"
);

取决于你想走哪条路。

希望能有所帮助。