0

/6557673/jsoup-cant-extract-stock-price-from-the-webpage を含め、検索して検索して読んでテストしました - これは私が見つけた最も近い問題ですが、私の見方は少し異なります。動的コンテンツを含む URL からテキストをスクレイピングしています。ここでは質問番号で行われているように、URL の最後のセグメントのみが異なります。私の問題は、存在しないページ番号を入力すると、「アプリケーションが予期せず停止しました」などの即時クラッシュが発生することです。意味のある「String index out of range -1」をログに記録します。

その行を実行する前に正規表現の inString チェックのようなことを行う方法はありますか?

私のURL文字列は次のようになります:

"http://whatever.website.com/ + dypageno + ".html";

およびコードのセクション:

try{
    doc = Jsoup.connect(srchStr).get();
        if (doc == null){
            Toast.makeText(this, "Could not locate", Toast.LENGTH_SHORT);
   }else{
   String grabbedtxt = doc.select("h1").text();
   String grabbed=grabbedtxt.substring(grabbedtxt.indexOf("$"));
   grabbed = "Response Today:\r \n \r \n" + grabbed + "\r \n \r \n";
   et.setText(grabbed);}    
   }
catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            et.setText("Page not found.");
        }
}

前述したように、これは不適切な URL が使用されるまで問題なく機能します。try/catch を connect ステートメントのみ、さまざまな例外などに制限しようとしましたが、役に立ちませんでした。もう坊主頭だから抜く毛がない!ここで何かを学ぶことを提案できる人はいますか? 前もって感謝します。

4

1 に答える 1

0

コードでgrabbedtxtは、 が空のかどうかを確認する必要がありますString。の

doc.select ("h1").text ()

タグが存在しないString場合、空を返すことがあります。h1次のコードはこれを示しています。

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

class Main {
    public static void main(String[] args) throws Exception {
        final Document doc = Jsoup.parse("<html><head/><body/></html");
        String grabbedtxt = doc.select("h1").text();
        if (grabbedtxt.contains("$")) {
            String grabbed = grabbedtxt.substring(grabbedtxt.indexOf("$"));
            System.out.println("Response Today: " + grabbed);
        }
        else {
            System.out.println("No response!");
        }
    }
}

これは印刷されますNo response!

于 2012-11-26T23:03:55.660 に答える