StringIndexOutofBoundsException при попытке запустить Google Search Api

1

Я пытаюсь запустить google-поиск api из SO-ссылки ниже: - Как вы можете искать программный Java API Java Вот мой код ниже:

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

Заранее спасибо.

Теги:
string

2 ответа

2
Лучший ответ

Проблема здесь:

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

Либо url.indexOf('=') либо url.indexOf('&') возвратил -1, что является незаконным аргументом в subString.

Вы должны проверить url вы разбираете, прежде чем предполагать, что он содержит = и &.

  • 0
    второстепенный вопрос: url.indexOf ('=') не должно быть проблемой, так как OP добавляет 1 к этому значению.
  • 0
    @aioobe У вас есть точка зрения, хотя, если URL не содержит = , я не думаю, что получение подстроки, начинающейся с первого символа URL, - это то, что хочет ОП.
Показать ещё 1 комментарий
0

добавьте System.Out.Println(Url); перед

url = URLDecoder.decode(url.substring(url.indexOf('=') +1, url.indexOf('&')), "UTF-8");

то вы узнаете, что строка url файла контактирует '=', '&' или нет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню