使用streamreader查找字符串的有效方法

我得到Web响应并使用streamreader来获取字符串的响应

我的代码是

HttpWebResponse response = (HttpWebResponse) request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream()); string strResponse = reader.ReadToEnd(); 

字符串的样本是

 
  1. Order ID #A123456 already exists: Update performed

要么

 
  1. New order created

我想在字符串中找到以下行

 Order ID #A123456 already exists: Update performed 

要么

 New order created 

这是搜索线路的最佳方式吗?

  while (!reader.EndOfStream) { line = reader.ReadLine(); if (!string.IsNullOrEmpty(line)) { } } 

好吧,我个人会用:

 string line; while ((line = reader.ReadLine()) != null) { if (line.Contains(...)) { } } 

读取该行会为您提供数据, 告诉您是否已到达流的末尾。 我同意杰夫的观点 – 通过逐行阅读“解析”HTML通常是一个坏主意。 当然,在你的具体情况下,这可能已经足够了。

以下是使用正则表达式的方法,确定正则表达式不是最好的方法,但如果这是一次使用html解析器的事情可能比你讨价还价更多

 Match myMatch = Regex.Match(input, @"
.*?
  • (.*?)", Regex.Singleline); if (myMatch.Success) { }
  • 这实际上取决于 – 您需要知道DOM中您的特定文本所在的位置吗? 输入有多大? 你的字符串会被分成两行吗?

    如果你只关心文本的存在,并且你的输入足够小以便驻留在内存中,那么我只需将整个内容读入内存。 我不确定CLR用于进行字符串匹配的确切算法是什么,但是一些较快的例程涉及预处理查询和要搜索的字符串,并且有更多的预处理信息可能会产生更快的搜索。

    当然,这一切都取决于CLR内部和您的特殊要求 – 测试,测试,测试。

    如果您想捕获有关文本及其与周围文档的关系的更多信息,我建议您查看HtmlAgility库以解析文档。