C#字符串替换,无法正常工作

时间:2009-09-22 17:15:44

标签: c# string

我有一个字符串,我从中读到:

TextReader tr = new StreamReader(this.dataPath );
string contents = tr.ReadToEnd(); 

内容的价值以:

开头
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n....."

当我尝试执行

        string styleSheet = "<?xml-stylesheet type=\"text/xsl\" href=\"message.xsl\"?>";
        string xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
        TextReader tr = new StreamReader(this.dataPath );
        string contents = tr.ReadToEnd(); 
        contents.Replace(xmlString,xmlString + styleSheet );

绝对不会找到第一次出现的XmlString。有什么想法吗?

6 个答案:

答案 0 :(得分:27)

尝试

contents = contents.Replace(xmlString,xmlString + styleSheet );

这是因为String类是不可变的。

答案 1 :(得分:5)

Replace()方法返回一个新的字符串对象,因此您必须将代码更改为:

 content = contents.Replace(xmlString,xmlString + styleSheet );

答案 2 :(得分:3)

你可能想这样做:

string styleSheet = "<?xml-stylesheet type=\"text/xsl\" href=\"message.xsl\"?>";
string xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
TextReader tr = new StreamReader(this.dataPath );
string contents = tr.ReadToEnd(); 
string result = contents.Replace(xmlString,xmlString + styleSheet );

您目前没有捕获您在最后一行所做的替换结果。

答案 3 :(得分:2)

System.String是不可变的。诸如Replace之类的操作返回一个新字符串而不是修改this字符串。如果您确实需要可变字符串或仅将System.Text.StringBuilder调用的结果分配给变量,请使用Replace

答案 4 :(得分:1)

要获得技术(以及谁不喜欢),如果您正在搜索字符串

<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n.....

搜索字符串必须是

"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?>\\r\\n"

 @"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n"

答案 5 :(得分:1)

这并没有真正回答你的问题,但已经多次回答,所以请允许我这一点。

我见过许多人们将流内容读入字符串的情况,这样就可以进行一些非常简单的操作。在许多情况下,当然在这种情况下,可以执行操作,而无需复制整个字符串并进行处理。

与现有代码相比,您可以编写一个StreamStringReplace方法,该方法将输入流,输出流,查找字符串和替换字符串作为其参数。这会更有效,特别是如果你的xml文档可以变得很大。