2016-10-01 3 views
1
try { 
    String url = "http://www.billboard.com/charts/artist-100"; 
    String urlFound; 
    String closing = ")"; 
    String start = "h"; 
    Document doc = Jsoup.connect(url).get(); 
    Elements urls = doc.getElementsByClass("chart-row__image"); 
    for (Element u : urls) { 
     urlFound = u.attr("style"); 
     String sub = urlFound.substring(urlFound.indexOf(start), urlFound.indexOf(closing)); 
     System.out.println(sub); 
     //Log.d("URLS,", attr.substring(attr.indexOf("http://"), attr.indexOf(")"))); 
    } 
} 
catch(IOException ex){ 
} 

Я попытался отладки несколько раз, но я получаю сообщение об ошибке, Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1 Я не уверен, почему это происходит либо? Может ли кто-нибудь дать мне представление о том, что может быть неправильным?Получить индекс на JSOUP не работает

ответ

1

Вы извлекаете атрибут стиля Строки из всех элементов div class="chart-row__image, но понимаете, что многие элементы в этой группе не имеют атрибута стиля. В этой ситуации JSoup возвращает пустую строку, и это испортит вашу программу. Решение не для этого, а вместо этого, чтобы jsoup выбирал только те элементы, которые имеют атрибут стиля.

Например, нет:

Elements urls = doc.getElementsByClass("chart-row__image"); 

а:

Elements urls = doc.select(".chart-row__image[style]"); 

И да, не игнорировать исключения.

Так

String url = "http://www.billboard.com/charts/artist-100"; 
    String urlFound; 
    String closing = ")"; 
    String start = "h"; 
    Document doc; 
    try { 
     doc = Jsoup.connect(url).get(); 
     // Elements urls = doc.getElementsByClass("chart-row__image"); 
     Elements urls = doc.select(".chart-row__image[style]"); 
     for (Element u : urls) { 
      urlFound = u.attr("style"); 
      int startingIndex = urlFound.indexOf(start); 
      int endingIndex = urlFound.indexOf(closing); 
      if (startingIndex > 0 && endingIndex > 0) { 
       String sub = urlFound.substring(startingIndex, endingIndex); 
       System.out.println(sub); 
      } 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    }