0

我已经搜索、搜索、阅读和测试......包括:/6557673/jsoup-cant-extract-stock-price-from-the-webpage - 这是我发现的最接近的问题,但我的观点有点不同。我正在从具有动态内容的 url 中抓取文本。只有 URL 的最后一段会有所不同,例如这里的问题编号。我的问题是,如果我输入一个不存在的页码,我会立即崩溃,例如:“应用程序已意外停止”。它记录“字符串索引超出范围 -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 限制为仅连接语句、不同的异常等,但无济于事。我已经剃了光头,所以我没有头发可以拔!谁能建议我在这里学习一些东西?提前致谢。

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 回答