C#中的String.Replace(char, char)方法

73

如何将\n替换为空格?

如果我这样做,会得到一个空字面错误:

string temp = mystring.Replace('\n', '');

我应该补充说明,字符串temp = mystring.Replace("\n", ""); 并没有实现任何功能。 - sarsnake
6
没问题,不过" "替换成string.Empty并不会改变太多,只是让我感觉好一点罢了 =) - Jon Erickson
12个回答

127

String.Replace('\n', '')无法工作,因为''不是有效的字符字面量。

如果你使用String.Replace(string, string)方法,则应该可以正常工作。

string temp = mystring.Replace("\n", "");

1
原来字符串中包含了 \r,所以我要替换两个:replace("\n", ""); replace("\r", ""); - sarsnake
@sarsnake 可能没有注意到字符串重载使用了双引号。 - devlord
你应该始终使用String.Empty而不是""。 - kingdango
3
好问题(或观点)...不要那么字面理解,这就是原因。 ;) String.Empty""并不真的重要(或值得辩论),然而 someValue == MyStaticValues.SomeMeaningsomeValue == "SomeMeaning" 是重要的,并且值得辩论。 魔术字符串更难维护和阅读,因此使用常量和静态值来优雅地和表达性地表示您的含义。 例如 Colors.White vs #FFFFFF。 - kingdango
string temp = mystring.Replace("\\n", ""); - Barbaros Alp
显示剩余2条评论

16

由于用“\n”替换并不能得到你想要的结果,这意味着你应该替换的实际上不是“\n”,而是其他字符组合。

一个可能性是你应该替换的是“\r\n”字符组合,这是Windows系统中的换行代码。如果你只替换“\n”(换行符)字符,那么它将保留“\r”(回车符)字符,这在如何显示字符串方面仍然可能被解释为换行。

如果字符串的来源是特定于某个系统的,你应该使用该特定字符串,否则你应该使用Environment.NewLine来获取当前系统的换行字符组合。

string temp = mystring.Replace("\r\n", string.Empty);
或:
string temp = mystring.Replace(Environment.NewLine, string.Empty);

4
string temp = mystring.Replace("\n", string.Empty).Replace("\r", string.Empty);

显然,这个操作会移除 '\n' 和 '\r',并且这是我知道的最简单的做法。

4

这应该可以工作。

string temp = mystring.Replace("\n", "");

您确定原始字符串中有实际的换行符吗?


2
如果你使用
string temp = mystring.Replace("\r\n", "").Replace("\n", "");

那么你就不必担心你的字符串来自哪里了。


1
这不应该是mystring.Replace("\r\n", "").Replace("\n", "")吗?如果你用""替换了\n,那么\r\n就变成了\r,\r\n将匹配不到任何内容。 - Chris Cudmore

1
创建一个像这样的扩展方法怎么样...
 public static string ReplaceTHAT(this string s)
 {
    return s.Replace("\n\r", "");
 }

然后,当您想要在任何地方替换它时,可以这样做。

s.ReplaceTHAT();

最好的祝福!


1
通过建议扩展方法来提高可读性和可重用性是一个好主意,但方法的名称可以更具描述性,例如ReplaceNewLine()。 - tie

1

这就是您确切的答案...

const char LineFeed = '\n'; // #10
string temp = new System.Text.RegularExpressions.Regex(
                  LineFeed
              ).Replace(mystring, string.Empty);

但这个更好... 特别是如果你想分割行 (你也可以与 Split 一起使用)

const char CarriageReturn = '\r'; // #13
const char LineFeed = '\n'; // #10
string temp = new System.Text.RegularExpressions.Regex(
                  string.Format("{0}?{1}", CarriageReturn, LineFeed)
              ).Replace(mystring, string.Empty);

1
使用正则表达式进行微小的替换会产生多少开销? - user565869
它会同时替换 "\r\n" 和 "\n",所以两者都可以使用(双重替换或以上)。 - cilerler
太多不必要的复杂性和额外的代码,真是让人头疼。:( string temp = mystring.Replace("\n", string.Empty).Replace("\r", string.Empty); 更快更简单。 - Shawn Kovac

1
一个注意点:在.NET中,换行符是“\r\n”。所以如果你从文件中加载文本,你可能需要使用它来代替“\n”。
编辑> 正如Samuel在评论中指出的那样,“\r\n”并不是.NET特有的,而是Windows特有的。

5
-1,"\r\n"不是来自.NET,而是来自Windows,请使用Environment.NewLine去查找环境(Windows/Linux/其他)的换行序列。 - Samuel
无论如何,要点仍然存在。"\n"不一定是换行符。 - Steven Evers
而 "\n" 不一定是换行符。由于张贴者有它,因此必须推断出他们正在寻找的是换行符。 - Samuel
为了使这样的推论有效和正确,前提(在这种情况下,即海报想要和需要的是\n)也必须是真实的。如果是这样的话,它就可以像现在这样正常工作。 - Steven Evers
同意SnOrfus的观点,如果OP已经尝试了String.Replace("\n", "")但是没有起作用,那么这个字符串一定包含"\r\n"。 - Patrick McDonald
7
停止争论"\r\n",使用"Environment.NewLine"。 - Benjol

0

@gnomixa - 你在评论中说的“没有实现任何东西”是什么意思?以下代码在我的VS2005中可以正常工作。

如果你的目标是去除换行符,从而缩短字符串,请看这个:

        string originalStringWithNewline = "12\n345"; // length is 6
        System.Diagnostics.Debug.Assert(originalStringWithNewline.Length == 6);
        string newStringWithoutNewline = originalStringWithNewline.Replace("\n", ""); // new length is 5
        System.Diagnostics.Debug.Assert(newStringWithoutNewline.Length == 5);

如果您的目标是将换行符替换为空格字符,同时保持字符串长度不变,请参考以下示例:
        string originalStringWithNewline = "12\n345"; // length is 6
        System.Diagnostics.Debug.Assert(originalStringWithNewline.Length == 6);
        string newStringWithoutNewline = originalStringWithNewline.Replace("\n", " "); // new length is still 6
        System.Diagnostics.Debug.Assert(newStringWithoutNewline.Length == 6);

你必须替换单个字符的字符串而不是字符,因为''不是可以传递给Replace(string,char)的有效字符。


0

我知道这是一个旧帖子,但我想添加我的方法。

public static string Replace(string text, string[] toReplace, string replaceWith)
    {
        foreach (string str in toReplace)
           text = text.Replace(str, replaceWith);

        return text;
    }

使用示例:

string newText = Replace("This is an \r\n \n an example.", new string[] { "\r\n", "\n" }, "");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接