0

StreamReader を使用してファイルから HTML を読み取り、ReadToEnd() 関数を呼び出すコードがあります。HTML は文字列として格納されます。

次に、このコード行を呼び出します。

string bookmarksBar = HTMLDoc.Substring(HTMLDoc.IndexOf(">Bookmarks bar</H3>"), HTMLDoc.IndexOf("</DL><p>"));

ここで何が起こっているかというと、HTML の特定のセクションが必要なので、string Substring メソッドを使用しています。最初の引数はstartIndexで、2 番目の引数はlengthです。

">Bookmarks bar</H3>"IndexOf メソッドを使用して、このコード行がとの間のテキスト セクションを返すようにしています。"</DL><p>"

"</DL><p>"したがって、返される文字列の末尾は が見つかった場所になるはずですよね?

問題は、文字列</DL><p>が見つかった場所で終わらず、323 文字後、この行で終わることです (返される文字列がどこで終わるかを示すために、4 つのアスタリスクを挿入しました)。

ICON="data:image/png;base64,iVBORw0KGgoAAA****ANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABbklEQVQ4je3RPWuTYQCF4fs875uYKEilOA 

"</DL><p>"この時点で文字列が一致しないため、ここで終了する理由がわかりません。

したがって、ここに HTML のより大きなセクションがあります。

jNpXrXKt4WFgn/KY1J1yBg874KWb0Vmr+BSttzgKt3LuBAAAAAElFTkSuQmCC\"></A>\r\n    </DL><p>\r\n    <DT><H3 ADD_DATE=\"1282073650\" LAST_MODIFIED=\"1301438557\">Link 1</H3>\r\n    <DL><p>\r\n        <DT><H3 ADD_DATE=\"1282073650\" LAST_MODIFIED=\"1286905747\">Link2</H3>\r\n        <DL><p>\r\n            <DT><A HREF=\"http://creators.xna.com/en-GB/create_detail#tour_four\" ADD_DATE=\"1282073650\" ICON=\"data:image/png;base64,iVBORw0KGgoAAA"

上記の HTML にが表示"</DL><p>"されているのに、なぜ「KGgoAAA」で停止するのではなく、その時点で停止しないのでしょうか。

何か案は?

ありがとう

4

4 に答える 4

6

あなたはあなた自身の質問に答えました。

the second argument is the length

2 番目の引数はendIndexではありません。

また、これを呼び出す方法では">Bookmarks bar</H3>"、結果にテキストが含まれることになります。これを試して:

// You could make the part after the + a constant. I'm using s.Length to demonstrate 
// where the number would come from.
var startIndex = HTMLDoc.IndexOf(">Bookmarks bar</H3>") + ">Bookmarks bar</H3>".Length;
var endIndex = HTMLDoc.IndexOf("</DL><p>");
string bookmarksBar = HTMLDoc.Substring(startIndex, endIndex - startIndex);
于 2011-05-23T21:00:10.567 に答える
1

試す:

string bookmarksBar = HTMLDoc.Substring(HTMLDoc.IndexOf(">Bookmarks bar</H3>"), HTMLDoc.IndexOf("</DL><p>")-HTMLDoc.IndexOf(">Bookmarks bar</H3>"));

于 2011-05-23T21:01:45.023 に答える
1

これを試して:

int start = HTMLDoc.IndexOf(">Bookmarks bar</H3>");
string bookmarksBar = HTMLDoc.Substring(index, HTMLDoc.IndexOf("</DL><p>")-start);
于 2011-05-23T21:02:35.617 に答える
0

2 番目のパラメーターは、インデックスを通過して移動する文字の量であるため、SubString(0, 4) は最初の 4 文字を取得し、Java SubString ロジックの代わりに SubString(4,8) は文字 4 から 8 を取得せず、それを返します。文字 4 ~ 12。

于 2011-05-23T21:00:51.057 に答える