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


71

如何替换\n为空白空间?

如果这样做,我将得到一个空的文字错误:

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

我应该添加该字符串temp = mystring.Replace(“ \ n”,“”); 什么
都没

6
同样,这并不重要,但是可以使用string.Empty代替“”。它让我感觉好=)
乔恩·埃里克森

Answers:


124

String.Replace('\n', '')不起作用,因为''它不是有效的字符文字。

如果您使用String.Replace(string,string)覆盖,它应该可以工作。

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

必须这样做,否则您将缺少新行的\ r或未正确存储从Replace返回的值。
塞缪尔

1
原来,该字符串包含\ r,所以我同时替换了两者:replace("\n", ""); replace("\r", "");
sarsnake

@sarsnake可能没有注意到字符串重载使用双引号。
devlord 2012年

您应该始终使用String.Empty而不是“”
kingdango 2012年

3
好问题(或要点?)...不要这么直白,这就是为什么。;) String.Emptyvs.""并不是很重要(或值得辩论),但是someValue == MyStaticValues.SomeMeaningvs vssomeValue == "SomeMeaning"是重要的,值得辩论。魔术字符串更难维护且可读性较差,因此请使用常量和静态值来优雅而富有表现力地表示您的意思。EG颜色:白色vs #FFFFFF。
kingdango 2015年

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

您确定原始字符串中确实有\ n个新行吗?


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

显然,这会删除“ \ n”和“ \ r”,并且很简单,因为我知道该怎么做。


2

如果您使用

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

那么您就不必担心字符串的来源。


1
那不应该是mystring.Replace(“ \ r \ n”,“”).Replace(“ \ n”,“”)吗?如果将\ n替换为“”,则“ \ r \ n”变为“ \ r”,并且“ \ r \ n”将不匹配任何内容。
克里斯·库德莫

1

一个警告:在.NET中,换行符为“ \ r \ n”。因此,如果您要从文件加载文本,则可能需要使用它而不是仅使用“ \ n”

samuel在评论中指出,“ edit>”不是.NET特定的,而是Windows特定的。


5
-1,“ \ r \ n”不是来自.NET。它来自Windows,使用Environment.NewLine查找环境的换行顺序(Windows / Linux / Other)。
塞缪尔

无论哪种方式,问题仍然存在。“ \ n”不一定是换行符。
史蒂文·埃弗斯

并且“ \ n”不一定是换行符。由于张贴者拥有它,因此必须推断出它是他们要寻找的换行符。
塞缪尔

为了使这样的推论有效并成立,前提(在这​​种情况下,\ n是发布者想要和需要的前提)也必须成立。如果真是这样,它会很好地工作。
史蒂文·埃弗斯

7
停止争论\ r \ n并使用Environment.NewLine
Benjol,2009年

1

如何创建这样的扩展方法呢?

 public static string ReplaceTHAT(this string s)
 {
    return s.Replace("\n\r", "");
 }

然后,当您要替换它时,可以执行此操作。

s.ReplaceTHAT();

最好的祝福!


1
+1通过建议扩展方法增加可读性和可重用性,但该方法的名称可能是更多的东西descriptinve,像ReplaceNewLine()

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
使用正则表达式进行简单替换的开销是多少?

它确实同时替换了“ \ r \ n”和“ \ n”,所以两者都起作用(两次替换或以上)
cilerler 2012年

过多的不必要的复杂性和额外的代码,cilerler。:(string temp = mystring.Replace("\n", string.Empty).Replace("\r", string.Empty);是如此之快和简单。
肖恩·科瓦奇

1

Bytes.com找到

string temp = mystring.Replace('\n', '\0');// '\0' 代表一个空字符


3
'\ 0'为NULL而不是空...> _>是的,我知道这很旧,但是那是一些危险的信息
dten

我第二和第三次驳斥。'\ 0'是一个字符。字符的名称有时被称为NIL,甚至很少被称为“空字符”,但是这种对“空”的使用会误导和使不了解的人感到困惑。'\ 0'=字符0,与其他任何字符一样,它是另一个字符。但是每个字符都有一个功能。当您需要一个可以视为空字符的字符时,可以使用'\ 0'。我有时会。但是,只有一行回答说这是一个空字符,真的像dten警告一样是“危险信息”。
Shawn Kovac 2013年

null和empty和'\ 0'通常用于表示3个不同的值,这些值不相等(但它们是相关的)。null是一个字符串值,实际上表示“我的值丢失”或“不在此处”。空表示该值存在,但没有字符-其长度为零。并且'\ 0'不是字符串。字符串可以包含一个可以为'\ 0'的字符或任何其他字符值。但是确实有人将'\ 0'称为NIL字符,NULL字符或空字符。所以要当心代码。在C#中null != string.Emptynull != '\0'string.Empty != '\0'
肖恩·科瓦奇


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" }, "");
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.