你能解决我使用String IndexOf方法这个奇怪的问题吗?

Cia*_*her 0 .net html c# string indexof

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

然后我调用这行代码:

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

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

我正在使用IndexOf方法,以便这行代码将返回一段应该在">Bookmarks bar</H3>"和之间的文本"</DL><p>"

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

那么问题是字符串不会在</DL><p>找到的地方结束,但在此行结束时会结束323个字符(我插入了四个星号来说明返回的字符串结束的位置):

ICON="data:image/png;base64,iVBORw0KGgoAAA****ANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABbklEQVQ4je3RPWuTYQCF4fs875uYKEilOA 
Run Code Online (Sandbox Code Playgroud)

我无法理解它为什么会在这里结束,因为此时字符串不匹配"</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"
Run Code Online (Sandbox Code Playgroud)

您可以"</DL><p>"在上面的HTML中看到,那么为什么它不会在那时停止,而不是停在"KGgoAAA"?

有任何想法吗?

谢谢

Dav*_*tka 6

你是在自问自答.

the second argument is the length
Run Code Online (Sandbox Code Playgroud)

第二个参数不是 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);
Run Code Online (Sandbox Code Playgroud)