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

时间:2011-05-23 20:56:16

标签: c# .net html string indexof

我的代码使用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”?

有什么想法吗?

由于

4 个答案:

答案 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.