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

Ich habe versucht, das Debuggen dies mehrmals zu arbeiten, aber ich halte den Fehler bekommen, Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1 Ich bin nicht sicher, warum dies entweder geschieht? Kann mir jemand eine Vorstellung davon geben, was falsch sein könnte?Erhalten Index auf JSOUP nicht

Antwort

1

Sie extrahieren das Stilattribut Strings von allen Elementen div class="chart-row__image, aber verstehen, dass viele Elemente in dieser Gruppe kein Stilattribut haben. In diesem Fall gibt JSoup einen leeren String zurück, und das bringt Ihr Programm in Unordnung. Die Lösung besteht nicht darin, stattdessen jsoup nur diejenigen Elemente auswählen zu lassen, die ein style-Attribut haben.

Zum Beispiel nicht:

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

sondern:

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

Und ja, nicht ignorieren Ausnahmen.

So

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(); 
    }