2012-07-10 130 views
2

首先:对不起我的英文不好!阅读字符串像StreamReader

我知道标题是不是最好的英语,但我真的不知道如何格式化这个问题...
我试图做的是逐行读取的HTML源代码行,以便当看到一个给定的单词(如http://)它会复制整个句子,因此我可以删除剩下的只保留该URL。

这是我已经试过:

using (var source = new StreamReader(TempFile)) 
{ 
    string line; 
    while ((line = source.ReadLine()) != null) 
    { 
     if (line.Contains("http://")) 
     { 
      Console.WriteLine(line); 
     } 
    } 
} 

这工作完全,如果我想从外部文件中读取,但是当我想读一个字符串或StringBuilder的,怎么办这是行不通的你逐行阅读这些内容?

回答

6

您可以使用new StringReader(theString)做了string,但我怀疑你的整体战略。用HTML敏捷包这样的工具会更好。

例如,这里是HTML敏捷性包提取的所有超链接:

HtmlDocument doc = new HtmlDocument(); 
doc.LoadHtml(theString); 
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href]") 
{ 
    HtmlAttribute att = link["href"]; 
    Console.WriteLine(att.Value); 
} 
+1

我同意。另外请确保使用ScrapySharp以及HtmlAgilityPack。让你用熟悉的jQuery语法来选择元素。从字面上提高你的生产力。 http://www.romcyber.com/post/2012/01/27/ScrapySharp-in-english-%29.aspx – 2012-07-10 22:30:31

+0

@SergioTapia酷;我没有听说过那个;将尝试 – 2012-07-10 22:32:57

+0

但这是另一个依赖项......并不是说它一定是坏的,只是一个需要考虑的事情。 – vines 2012-07-10 22:35:32

0

那么一个字符串只是一个字符串,它没有任何行。

您可以使用类似String.Split的东西来分开\r符号。

MSDN:String.Split()

string words = "This is a list of words, with: a bit of punctuation" + 
         "\rand a newline character."; 

string [] split = words.Split(new Char [] {'\r' }); 

foreach (string s in split) { 
    if (s.Trim() != "")  
     Console.WriteLine(s); 
} 
0

描述我想你可以标记化的输入并检查所要求的内容的每个条目。

string[] info = myStringBuilder.toString().split[' ']; 
foreach(var item in info) { 
if(item.Contains('http://') { 
    //work with it 
    } 
} 
0

您可以使用内存流来读取。