2015-03-19 9 views
-2

главное:Почему StringIndexOutOfBoundsException?

public static void main(String args[]){ 

PicParcer c = new PicParcer(); 
strHtml = c.getHTML(strMainLink); 
links = c.poimeyArray(strHtml); 
space = c.spaceDel(links); 

/* 
for (String strHtml1 : strHtml) { 
     System.out.println(strHtml); 
    }*/ 

    for (String strHtml1 : links) { 
     System.out.println(strHtml1); 
    } 

    for (String link : space) { 
     System.out.println(link); 
    } 


System.out.println(strHtml.size()); 
System.out.println(links.size()); 
} 

метод getHTML;

public ArrayList<String> getHTML(String urlToRead) {         //получаем сайт 
     ArrayList<String> html = new ArrayList<String>(); 
     URL url; 
     HttpsURLConnection conn; 
     BufferedReader reader; 
     String line;               /// очень нужная фигня!!!!! 
     try { 
      url = new URL(urlToRead); 
      conn = (HttpsURLConnection) url.openConnection(); 
      conn.setRequestMethod("GET"); 
      reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

      while((line=reader.readLine()) != null) { 
       html.add(line); 
      } 

     reader.close(); 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
     return html; 
    } 

public static final String strJPG = ".jpg";

public ArrayList<String> spaceDel(ArrayList<String> htmlArray){ 
    ArrayList<String> spaceDel = new ArrayList<String>(); 
    for(int i=0; i< htmlArray.size();i++){ 
     spaceDel.add(htmlArray.get(i).substring(htmlArray.get(i).indexOf("/"), htmlArray.get(i).indexOf(strJPG))); 
    } 

    return spaceDel; 
} 

В этом примере я имею StringIndexOutOfBoundsException исключение, если я изменю strJPG (строка там) на "" или с программой try-catch работает. Что я делаю не так?

Строка Пример:

<img src="/b/thumb/88785978/14267775060770s.jpg" width="220" height="123" alt="87" class="img preview "> 
<img src="/b/thumb/88785978/14267776383080s.jpg" width="220" height="123" alt="94" class="img preview "> 
<img src="/b/thumb/88785978/14267776539240s.jpg" width="208" height="220" alt="32" class="img preview "> 
<img src="/b/thumb/88785978/14267788646090s.jpg" width="204" height="220" alt="130" class="img preview "> 
<img src="/b/thumb/88785978/14267792210110s.jpg" width="220" height="146" alt="44" class="img preview "> 
<img src="/b/thumb/88785978/14267793068690s.jpg" width="220" height="123" alt="711" class="img preview "> 
<img src="/b/thumb/88785978/14267794678710s.jpg" width="220" height="220" alt="54" class="img preview "> 
<img src="/b/thumb/88785978/14267795607190s.jpg" width="220" height="214" alt="95" class="img preview "> 
<img src="/b/thumb/88785978/14267800381730s.jpg" width="220" height="192" alt="126" class="img preview "> 
<img src="/b/thumb/88785978/14267806796140s.jpg" width="220" height="124" alt="4612" class="img preview "> 
<img src="/b/thumb/88785978/14267832300390s.jpg" width="150" height="109" alt="2" class="img preview "> 
+0

Вы избегаете символов в строках ??? и попытаться опубликовать основной метод –

+0

Можете ли вы добавить код, в котором вы создаете 'htmlArray'? – Arkantos

+1

Код примерно в 50 раз легче отлаживать, когда вы разбиваете сложные сложные команды на более мелкие шаги. Я вижу 'htmlArray.get (i)' снова и снова. Просто сделайте локальную переменную и ссылку на нее. Я бы начал с разбивки этой длинной строки кода. – ryanyuyu

ответ

0

Я попробовал ваш код в коротком примере

package de.pageto.mavenproject1; 

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

public class StringSplitter { 

    public static void main(String[] args) { 
     String[] data = {"<img src=\"/b/thumb/88785978/14267775060770s.jpg\" width=\"220\" height=\"123\" alt=\"87\" class=\"img preview \">", 
      "<img src=\"/b/thumb/88785978/14267776383080s.jpg\" width=\"220\" height=\"123\" alt=\"94\" class=\"img preview \">", 
      "<img src=\"/b/thumb/88785978/14267776539240s.jpg\" width=\"208\" height=\"220\" alt=\"32\" class=\"img preview \">", 
      "<img src=\"/b/thumb/88785978/14267788646090s.jpg\" width=\"204\" height=\"220\" alt=\"130\" class=\"img preview \">", 
      "<img src=\"/b/thumb/88785978/14267792210110s.jpg\" width=\"220\" height=\"146\" alt=\"44\" class=\"img preview \">", 
      "<img src=\"/b/thumb/88785978/14267793068690s.jpg\" width=\"220\" height=\"123\" alt=\"711\" class=\"img preview \">", 
      "<img src=\"/b/thumb/88785978/14267794678710s.jpg\" width=\"220\" height=\"220\" alt=\"54\" class=\"img preview \">", 
      "<img src=\"/b/thumb/88785978/14267795607190s.jpg\" width=\"220\" height=\"214\" alt=\"95\" class=\"img preview \">", 
      "<img src=\"/b/thumb/88785978/14267800381730s.jpg\" width=\"220\" height=\"192\" alt=\"126\" class=\"img preview \">", 
      "<img src=\"/b/thumb/88785978/14267806796140s.jpg\" width=\"220\" height=\"124\" alt=\"4612\" class=\"img preview \">", 
      "<img src=\"/b/thumb/88785978/14267832300390s.jpg\" width=\"150\" height=\"109\" alt=\"2\" class=\"img preview \">" 
     }; 
     System.out.println("Result: " + spaceDel(Arrays.asList(data))); 
    } 

    public static ArrayList<String> spaceDel(List<String> htmlArray) { 
     final String strJPG = ".jpg"; 
     ArrayList<String> spaceDel = new ArrayList<>(); 
     for (String str : htmlArray) { 
      spaceDel.add(str.substring(str.indexOf("/"), str.indexOf(strJPG))); 
     } 
     return spaceDel; 
    } 
} 

Все отлично работает. Мне кажется, что вы пытаетесь отделить <img> теги от HTML-страниц. Эти теги могут иметь другие форматы изображений: .jpg (т. Е. Png, gif или jpeg).

Сначала проверьте данные.

Смежные вопросы