什么是处理字符串的好的和良好的性能方式

时间:2011-03-09 22:47:56

标签: c# stringstream

我有一个字符串,其格式如下: <b>*GTPersonnel</b><table border=1><tr><td>&#115;&#115;&#50;&#49;&#49;&#49;</td></tr></table>

我想要处理<td>个代码之间的数据,并将&#Blah;的每个匹配项替换为相同的字符,例如&#115;我希望将其替换为a字符115,因为&#是该字符的代码。

我可以遍历整个字符串,找到;索引,找到{{1}}索引,读取其中的字符并找到该代码的字符......好吧它有点算法..我想知道.NET是否有更好的东西可以用于这个目的。

2 个答案:

答案 0 :(得分:2)

如果使用XHTML,您可以简单地修改EntityHandling对象中的XmlTextReader属性,告诉它自动处理字符实体:

XmlTextReader reader = new XmlTextReader( "temp.xml" );
reader.EntityHandling = EntityHandling.ExpandCharEntities;

然后,您可以使用XmlTextReaderLINQ to XML的帮助来阅读您的文件。例如,如果你有这样的xml文件:

<?xml version="1.0" encoding="utf-8" ?>
<document>
    <td>&#115;&#115;&#50;&#49;&#49;&#49;</td>
</document>

你编写下面的代码和下面几个字符串:

while ( reader.Read() )
    if ( reader.NodeType == XmlNodeType.Text )
        Console.WriteLine( reader.Value );

您在控制台窗口中获得ss2111值。

答案 1 :(得分:1)

一种高性能,相当简单的方法是建立一个并行字符串构建器(将其长度初始化为与原始字符串相同),并通过连续的IndexOf(“#”)调用继续从第一个字符串追加到它适当的转换。这样你就不会进行任何插入或删除操作,你没有调整stringbuilder的后备数组的大小(除了最后),而你只是向前读取第一个字符串。 LINQifying可以使用Aggregate(),但会比它的价值更麻烦,而且可能不太清楚。