抓取網頁字串的程式出現錯誤

這是我寫的到Amazon抓取Top-Reviewers的程式

http://paste.bradleygill.com/index.php?paste_id=21...

我的問題是在

public void NameToLink(int person)中的while迴圈

如果我寫

System.out.print( line );

或者

System.out.print(line.substring(line.indexOf("#"+person)));

都可以在cmd下印出正確結果

但是我的目標是抓取Mark,Beth Cholette...

所以我改寫成

System.out.print(line.substring(line.lastIndexOf("#"+person), line.indexOf("</b>")));

卻出現錯誤訊息

java.lang.StringIndexOutOfBoundsException: String index out of range: -6022

at java.lang.String.substring(Unknown Source)

at RankAndLink.NameToLink(RankAndLink.java:115)

at RankAndLink.main(RankAndLink.java:158)

我不知道哪裡寫錯了

可以教我如何修正嗎?

已更新項目:

感謝u9323523

所以我做了兩件事修正我的code

1.對讀入的Line再做子字串切割

2.不用lastIndexOf定位

果然解決了我的問題^^

話說,為什麼你不要點數呢?

我還蠻想把點數給你的^^

1 個解答

評分
  • 1 0 年前
    最佳解答

    主要是因為 reviewers 裡的所有人都會在某一次的 readLine被讀取到

    當次的讀取就會取得 #1.....#10的所有人名資料 ,也就是

    ......... ...

    此行字串長度高達7000多字,這是因為網頁程式在做輸出的時候沒有在固定的段落裡加入段行符號才會如此

    2009-09-29 21:27:54 補充:

    還有這行也有些問題

    line.lastIndexOf("#"+person)

    因為它是從後會先搜尋

    例如找尋#1 ,但因為#10 也包含 #1這個字串,所以先找到#10的字串所在位置,因而造成 substring 的第1個參數值大於第2個參數值

    才會出現 String index out of range: -6022 這個例外狀況

    2009-09-30 02:55:43 補充:

    主要是因為 reviewers 裡的所有人都會在某一次的 readLine被讀取到

    當次的讀取就會取得 #1.....#10的所有人名資料 ,也就是

    <tr id="reviewer1">.......<tr id="reviewer10">......</tr>

    此行字串長度高達7000多字,這是因為網頁程式在做輸出的時候

    沒有在固定的段落裡加入段行符號才會如此

    還有這行也有些問題

    line.lastIndexOf("#"+person)

    因為它是從後面先搜尋

    例如找尋#1 ,但因為#10 也包含 #1這個字串,所以先找到#10的字串所在位置,

    因而造成 substring 的第1個參數值大於第2個參數值

    才會出現 String index out of range: -6022 這個例外狀況

    2009-09-30 03:04:27 補充:

    恭喜你靠自己的力量完成了~~

    哈哈~不過不是我不要點數啦~

    是因為怕後續需要補充程式碼,

    會因為知識+的補充內容功能

    只能用純文字,不能用HTML,

    而且格式還會變的一團亂

    所以才先用意見的方式把問題的所在點告訴你

    等到問題有一個結果的時候再做回答總結。

    參考資料: 把剛才的意見照抄過來
還有問題?馬上發問,尋求解答。