如何删除字符串中的反斜杠

时间:2016-10-13 22:52:45

标签: c#

我从一个名为" willekeurigwoord.nl"的网站上得到一个字符串。这意味着随机的单词。因此,当我从HtmlAgilityPack的网站上获取字符串时,它的格式为" \ n \ t \ t \ ttkegelvrucht \ r \ n \ t \ n \ t \ t"。

所以我得到的词是" kegelvrucht"但是在这个词之前和之后有反斜杠,当我试图删除它们时会被忽略,即使我放了" @"或者在字符串前面使用双反斜杠(" \")。

所以我的问题是,如何删除字符串中的\?

我确实尝试过评论中的内容。 谢谢!

    private string RandomWordOnline() //Get the word online
    {
        //get string from htlm file with htmlagilitypack
        var webGet = new HtmlWeb();
        var doc = webGet.Load("http://www.willekeurigwoord.nl/");
        String word = doc.DocumentNode.SelectSingleNode("//h1").InnerText;

        //word = word.Replace(@"\", "");            
        //word = @word.Trim(new char[] {' ','\\'});
        //word = word.Substring(8, word.Length - 13);
        //word = word.Substring(0, 13);

        //trying to remove backslash, does not work
        for (int i = 0; i < word.Length; i++)
        {

            char chrWord = Convert.ToChar(word.Substring(i, 1));
            char backslash = Convert.ToChar(@"\");
            if (chrWord == backslash)
            {
                word = word.Remove(i, 1);
            }

        }

        return word;           
    }

3 个答案:

答案 0 :(得分:2)

那些反斜杠不在字符串中,它们只是制表符,回车符和换行符的表示。例如,Visual Studio显示为\t\t\n\n的字符串长度仅为4个字符,而不是8个字符。

你可以像这样摆脱它们:

var webGet = new HtmlWeb();
var doc = webGet.Load("http://www.willekeurigwoord.nl/");
String word = doc.DocumentNode.SelectSingleNode("//h1").InnerText;
string fixedWord = word.Trim();

Trim删除文字周围的所有空格,包括标签和新行。如果您只想删除某些特定字符,或者在字符串中间删除它们,则需要执行以下操作:

string fixedWord = word.Replace("\t", "").Replace("\n", "").Replace("\r", "").Trim();

答案 1 :(得分:1)

只需在字符串上调用Trim()

string cleaned = word.Trim();

它将删除所有前导和尾随空格,其中包含您要删除的所有字符。

答案 2 :(得分:0)

可能C#String专家会知道您正在寻找的答案。但这是后C语言使事情变得更难的一个很好的例子。 编译器可能会将您的\视为转义字符,因此代码在运行时永远不会看到它。

顺便说一下,“word”对于标签来说是一个糟糕的选择,因为它在大多数语言中都是保留的(意思是16位宽或类似的类型)。

在C中,您只需按字符逐个字符串,并根据它是否为'\'将每个字符串复制到一个新字符串中; (我没有测试/调试这个,你需要添加边界检查,除非你知道所有字符串的大小。)

i = j = 0;

while (strIn[i] != '0') {

    if (strIn[i] != '\') {

        strOut[j++] = strIn[i];

    }

    i++;
}

(如果这听起来像额外的工作,请知道在运行时,您的C#无论如何都会这样做,并隐藏与您的内存管理器所需的交互,因此您不知道为什么您的程序运行缓慢。)