Замена строки C #, не работает - PullRequest
       23

Замена строки C #, не работает

2 голосов
/ 22 сентября 2009

У меня есть строка, с которой я прочитал:

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 ]

27 голосов
/ 22 сентября 2009

Попробуйте

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

Это потому, что класс String неизменен.

5 голосов
/ 22 сентября 2009

Метод Replace () возвращает новый строковый объект, поэтому вам придется изменить код на:

 content = contents.Replace(xmlString,xmlString + styleSheet );
3 голосов
/ 22 сентября 2009

Вы, вероятно, хотите сделать это:

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

В настоящее время вы не записываете результаты замены, которые вы делаете в последней строке.

2 голосов
/ 22 сентября 2009

System.String является неизменным. Такие операции, как Replace, возвращают новую строку вместо изменения this строки. Используйте System.Text.StringBuilder, если вам действительно нужна изменяемая строка, или просто присвойте результат вызова Replace переменной.

1 голос
/ 22 сентября 2009

Это на самом деле не отвечает на ваш вопрос, но на него уже отвечали не раз, поэтому, пожалуйста, разрешите мне это в сторону.

Я видел много случаев, когда люди считывали содержимое потока в строку, чтобы можно было выполнить некоторые действительно простые манипуляции. Во многих случаях и, конечно, в этом случае, операция может быть выполнена, даже не делая копию всей строки и не работая над этим.

Приложив немного больше усилий, чем ваш существующий код, вы могли бы написать метод StreamStringReplace, который принимает в качестве параметров входной поток, выходной поток, строку поиска и строку замены. Это было бы намного эффективнее, особенно если ваши документы XML могут стать массивными.

1 голос
/ 22 сентября 2009

Чтобы получить технику (и кому это не нравится), если вы ищете строку`

<?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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...