2

まず第一に:私の下手な英語でごめんなさい!

タイトルが最高の英語ではないことは知っていますが、この質問をどのようにフォーマットすればよいかわかりません...
私がやろうとしているのは、HTML ソースを 1 行ずつ読むことです。 http://) 文全体をコピーするので、残りを削除して URL のみを保持できます。

これは私が試したことです:

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

これは、外部ファイルから読み取りたい場合は完全に機能しますが、文字列または stringbuilder を読み取りたい場合は機能しません。これらを行ごとに読み取るにはどうすればよいですか?

4

5 に答える 5

7

を使用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);
}
于 2012-07-10T22:27:52.377 に答える
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);
}
于 2012-07-10T22:27:03.537 に答える
0

まず、StringReaderを使用できます。

別のオプションは、 https://stackoverflow.com/a/10380166/396583で説明されているように、最初に文字列をバイト配列に変換して、文字列からMemoryStreamを作成することです。

于 2012-07-10T22:32:46.333 に答える
0

入力をトークン化し、必要なコンテンツの各エントリを確認できると思います。

 string[] info = myStringBuilder.toString().split[' '];
 foreach(var item in info) {
 if(item.Contains('http://') {
    //work with it
    }
 }
于 2012-07-10T22:35:10.457 に答える
0

メモリ ストリームを使用して読み取ることができます。

于 2012-07-10T22:36:31.877 に答える