如何消除字符串中的所有换行符?

Iam*_*per 43 .net c# string newline

我需要摆脱出现在我的字符串中的所有换行符(来自db).我使用以下代码执行此操作:

value.Replace("\r\n", "").Replace("\n", "").Replace("\r", "")
Run Code Online (Sandbox Code Playgroud)

我可以看到,至少有一个角色表现得像行结束,幸存下来.字符代码是8232.

这对我来说很蹩脚,但我必须说这是我第一次有幸看到这个角色.显而易见,我可以直接替换这个字符,但我正在考虑将我当前的方法(基于替换"\ r"和"\n"的组合)扩展到更加可靠的东西,因此它不仅包括' 8232'char,还有其他所有人都没有找到我.

对于这样的问题,你有防弹方法吗?

编辑#1:

在我看来,有几种可能的解决方案:

  1. 使用Regex.Replace
  2. 删除所有字符,如果它是IsSeparator或IsControl
  3. 如果是IsWhiteSpace,请替换为""
  4. 创建所有可能行结尾的列表("\ r \n","\ r","\n",LF,VT,FF,CR,CR + LF,NEL,LS,PS)并将其替换为空串.这是很多替代品.

我会说最好的结果将是应用第一和第四种方法之后,但我无法确定哪种方法会更快.您认为哪一个是最完整的?

编辑#2

我在下面发了anwer.

Iam*_*per 62

下面是解决我的问题的扩展方法.LineSeparator和ParagraphEnding当然可以在其他地方定义,如静态值等.

public static string RemoveLineEndings(this string value)
{
    if(String.IsNullOrEmpty(value))
    {
        return value;
    }
    string lineSeparator = ((char) 0x2028).ToString();
    string paragraphSeparator = ((char)0x2029).ToString();

    return value.Replace("\r\n", string.Empty)
                .Replace("\n", string.Empty)
                .Replace("\r", string.Empty)
                .Replace(lineSeparator, string.Empty)
                .Replace(paragraphSeparator, string.Empty);
}
Run Code Online (Sandbox Code Playgroud)


Tre*_*ors 24

根据维基百科的说法,您可能需要处理许多行终止符(包括您提到的这一行).

LF:换行,U + 000A
VT:垂直标签,U + 000B
FF:换模,U + 000C
CR:回车,U + 000D
CR + LF:CR(U + 000D),然后是LF(U + 000A)
NEL:下一行,U + 0085
LS:行分隔符,U + 2028
PS:段落分隔符,U + 2029

  • 在正则表达式中:`Regex.Replace(str,@"[\ u000A\u000B\u000C\u000D\u2028\u2029\u0085] +",String.Empty)` (17认同)

Ed *_*tes 13

8232(0x2028)和8233(0x2029)是您可能想要消除的唯一其他.请参阅char.IsSeparator的文档.

  • 我认为他只是想查看文档,而不是实际使用`char.IsSeparator`. (3认同)
  • @Joe - 是的,但是我正在向OP展示那里*是*他想要摆脱哪些角色点的官方列表,并且它在文档中. (2认同)

csh*_*net 9

在这个问题上对约塞连的道具,我认为他是对的.用一个空格替换所有空格:

data = Regex.Replace(data, @"\s+", " ");
Run Code Online (Sandbox Code Playgroud)

  • 呃...不会到处插入空格吗?因为它不仅匹配所有空格,它还匹配空字符串.你想用`"\ s +"来代替. (2认同)

not*_*row 7

我建议删除所有空格(char.IsWhitespace),并用单个空格替换它.IsWhiteSpace负责所有奇怪的unicode空格.