2011-05-23 65 views
0

我有代碼使用StreamReader從文件中讀取HTML,然後調用ReadToEnd()函數。 HTML以字符串形式存儲。你能解決我使用String IndexOf方法的這個奇怪問題嗎?

然後我把這行代碼:

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

所以這裏發生了什麼是我想要的HTML的特定部分,所以我使用的字符串的子串方法。第一個參數是startIndex,第二個參數是長度

我使用的IndexOf方法,使該行的代碼將返回文本的部分應該是">Bookmarks bar</H3>""</DL><p>"

返回的字符串,從而結束之間應該是一個"</DL><p>"被發現,對不對?

然後的問題是,該字符串不結束,其中</DL><p>被發現,但端部323點的字符以後,在這條線(I已插入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」停止?

任何想法?

謝謝

回答

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); 
0

第二個參數是它會移動通過索引字符的量,所以SUBSTRING(0,4)取的前四個字符,SUBSTRING(4,8),而不是在Java SUBSTRING邏輯不帶字符4 - 8,它返回字符4 - 12

1

嘗試:

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

1

嘗試這種情況:

int start = HTMLDoc.IndexOf(">Bookmarks bar</H3>"); 
string bookmarksBar = HTMLDoc.Substring(index, HTMLDoc.IndexOf("</DL><p>")-start); 
相關問題