像StreamReader一样读取字符串

时间:2012-07-10 22:24:49

标签: c# streamreader

首先:抱歉我的英语不好!

我知道标题不是最好的英文,但我真的不知道如何格式化这个问题...
我想要做的是逐行读取一个HTML源代码,这样当它看到一个给定的单词(如http://)时,它会复制整个句子,这样我就可以删除其余的只保留URL。

这是我尝试过的:

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

如果我想从外部文件中读取它,但是当我想读取字符串或字符串构建器时它不起作用,那么它如何工作,你如何逐行阅读?

5 个答案:

答案 0 :(得分:6)

您可以new StringReader(theString)使用string来执行此操作,但我对您的整体策略提出质疑。使用像HTML Agility Pack这样的工具可以做得更好。

例如,这里是HTML Agility Pack提取所有超链接:

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 :(得分: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);
}

答案 2 :(得分:0)

首先,您可以使用StringReader

另一种选择是通过首先将字符串转换为字节数组从字符串创建MemoryStream,如https://stackoverflow.com/a/10380166/396583

中所述

答案 3 :(得分:0)

我认为您可以对输入进行标记,并检查每个条目是否包含所需内容。

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

答案 4 :(得分:0)

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