java - 尝试运行 Google Search Api 时出现 StringIndexOutofBoundsException

标签 java string

我正在尝试从下面的 SO 链接运行 google search api :- How can you search Google Programmatically Java API 下面是我的代码:-

public class RetrieveArticles {

    public static void main(String[] args) throws UnsupportedEncodingException, IOException {
        // TODO Auto-generated method stub

        String google = "http://www.google.com/news?&start=1&q=";
        String search = "Police Violence in USA";
        String charset = "UTF-8";
        String userAgent = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"; // Change this to your company's name and bot homepage!

        Elements links = Jsoup.connect(google + URLEncoder.encode(search, charset)).userAgent(userAgent).get().children();

        for (Element link : links) {
            String title = link.text();
            String url = link.absUrl("href"); // Google returns URLs in format "http://www.google.com/url?q=<url>&sa=U&ei=<someKey>".
            url = URLDecoder.decode(url.substring(url.indexOf('=') +1, url.indexOf('&')), "UTF-8");

            if (!url.startsWith("http")) {
                continue; // Ads/news/etc.
            }
           System.out.println("Title: " + title);
           System.out.println("URL: " + url);
        }   
   }
}

当我尝试运行此程序时,出现以下错误。谁能帮我解决这个问题吗?

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(String.java:1911)
    at google.api.search.RetrieveArticles.main(RetrieveArticles.java:34)

提前致谢。

最佳答案

问题就在这里:

url.substring(url.indexOf('=') +1, url.indexOf('&'))

url.indexOf('=')url.indexOf('&') 返回 -1,这是 subString< 中的非法参数.

您应该先验证正在解析的 url,然后再假设它包含 =&

关于java - 尝试运行 Google Search Api 时出现 StringIndexOutofBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27620780/

相关文章:

java - 在 Java 中,使用 JPA2,我应该使用哪个类来保存日期信息?

java - 使用日语输入java

Java String pool相关疑惑

javascript - 忽略空格的字符串的 Jest 相等匹配器

string - 美国日期(文本)到欧洲日期(日期)的 Excel 转换

c++ - 字符串复制到字符数组

java - 有权限无法写入SD卡

java - 如何使对话之间有等待时间

java - 如何将KStream聚合到固定大小的列表?

java - ResolvedModule、Module 和 Observable Module 有什么区别