Что такое хороший и хороший способ производительности для обработки строки
У меня есть строка в таком формате:<b>*GTPersonnel</b><table border=1><tr><td>ss2111</td></tr></table>
Я хочу обработать те данные, которые между <td>
теги и заменить каждое вхождение &#Blah;
с его равным характером так, например, в s
Я хочу, чтобы его заменил только персонаж a
так как 115
это код символа для этого.
Я могу перебрать всю строку, найти &#
индекс, найти ;
индексировать, читать символ между ними и найти символ для этого кода... ну, это немного алгоритмически... Мне было интересно, есть ли лучшие вещи с.NET, которые я могу использовать для этой цели.
2 ответа
Если вы используете XHTML
Вы можете просто изменить EntityHandling
недвижимость в XmlTextReader
объект, чтобы сказать ему обрабатывать символьные объекты автоматически:
XmlTextReader reader = new XmlTextReader( "temp.xml" );
reader.EntityHandling = EntityHandling.ExpandCharEntities;
Тогда вы можете прочитать ваш файл с XmlTextReader
или с помощью LINQ to XML
, Например, если у вас есть XML-файл, подобный этому:
<?xml version="1.0" encoding="utf-8" ?>
<document>
<td>ss2111</td>
</document>
И вы пишете код ниже и следующую пару строк:
while ( reader.Read() )
if ( reader.NodeType == XmlNodeType.Text )
Console.WriteLine( reader.Value );
Ты получаешь ss2111
значение в вашем окне консоли.
Высокопроизводительным, достаточно простым способом было бы установить построитель параллельных строк (инициализировать его длину так же, как оригинал) и продолжать добавлять к нему с первого раза последовательные вызовы IndexOf("#") и соответствующие преобразования. Таким образом, вы не делаете никаких вставок или удалений, вы не изменяете размер массива поддержки строителя строк (кроме как в конце), и вы читаете первую строку только вперед. LINQifying это возможно с Aggregate(), но будет больше проблем, чем стоит, и, вероятно, менее ясно.