阅读字符串像StreamReader
问题描述:
首先:对不起我的英文不好!阅读字符串像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的,怎么办这是行不通的你逐行阅读这些内容?
答
您可以使用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);
}
答
那么一个字符串只是一个字符串,它没有任何行。
您可以使用类似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);
}
答
首先,你可以使用一个StringReader。
另一种选择是经由首先将字符串转换为一个字节数组来创建从所述串的MemoryStream,如在https://*.com/a/10380166/396583
答
描述我想你可以标记化的输入并检查所要求的内容的每个条目。
string[] info = myStringBuilder.toString().split[' '];
foreach(var item in info) {
if(item.Contains('http://') {
//work with it
}
}
答
您可以使用内存流来读取。
我同意。另外请确保使用ScrapySharp以及HtmlAgilityPack。让你用熟悉的jQuery语法来选择元素。从字面上提高你的生产力。 http://www.romcyber.com/post/2012/01/27/ScrapySharp-in-english-%29.aspx – 2012-07-10 22:30:31
@SergioTapia酷;我没有听说过那个;将尝试 – 2012-07-10 22:32:57
但这是另一个依赖项......并不是说它一定是坏的,只是一个需要考虑的事情。 – vines 2012-07-10 22:35:32