0

我有代码使用 StreamReader 从文件中读取 HTML,然后调用 ReadToEnd() 函数。HTML 存储为字符串。

然后我调用这行代码:

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

所以这里发生的是我想要 HTML 的特定部分,所以我使用字符串 Substring 方法。第一个参数是startIndex,第二个参数是length

我正在使用 IndexOf 方法,因此这行代码将返回一段文本,它应该介于">Bookmarks bar</H3>""</DL><p>"

所以返回字符串的结尾应该是在哪里"</DL><p>"找到的,对吧?

那么问题是字符串没有在</DL><p>找到的地方结束,而是在 323 个字符之后结束,在这一行(我插入了四个星号来说明返回的字符串在哪里结束):

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"

您可以"</DL><p>"在上面的 HTML 中看到 ,那么为什么它不在那个点停止,而不是在“KGgoAAA”处停止呢?

有任何想法吗?

谢谢

4

4 回答 4

6

你是在自问自答。

the second argument is the length

第二个参数不是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

第二个参数是它将通过索引移动的字符数,因此 SubString(0, 4) 取前四个字符,SubString(4,8) 代替 Java SubString 逻辑不带字符 4 - 8,它返回字符 4 - 12。

于 2011-05-23T21:00:51.057 回答