我的代码使用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"
您可以在上面的HTML中看到"</DL><p>"
,那么为什么不在此时停止,而不是停在“KGgoAAA”?
有什么想法吗?
由于
答案 0 :(得分: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);
答案 1 :(得分:1)
尝试:
string bookmarksBar = HTMLDoc.Substring(HTMLDoc.IndexOf(">Bookmarks bar</H3>"), HTMLDoc.IndexOf("</DL><p>")-HTMLDoc.IndexOf(">Bookmarks bar</H3>"));
答案 2 :(得分:1)
试试这个:
int start = HTMLDoc.IndexOf(">Bookmarks bar</H3>");
string bookmarksBar = HTMLDoc.Substring(index, HTMLDoc.IndexOf("</DL><p>")-start);
答案 3 :(得分:0)
第二个参数是它将通过索引移动的字符数,因此SubString(0,4)取前四个字符,SubString(4,8)而不是Java SubString Logic不带字符4 - 8 ,它返回字符4 - 12.