@Myuji

Почему появляется NPE?

package picparcer;
 
 
import java.awt.Image;
import java.io.*;
import java.net.*;
import java.util.ArrayList;
import javax.net.ssl.HttpsURLConnection;
 
public class PicParcer {
    
    public static String strMainLink = "https://2ch.hk/b/res/88769997.html";        //начльная ссылка
    public static String strSite = strMainLink.substring(0, strMainLink.indexOf("/", 8));    //сам сайт
    
    public static final String strSourceTag = "<img";
    
    
    public static String strJPG = ".jpg";
    public static String strWEBM = ".webm";
    public static String strPNG = ".png";
    
    
    public static ArrayList<String> strHtml = new ArrayList<>();          //сайт в строках
    public static ArrayList<String> links = new ArrayList<>();            //ссылки на ресурсы
    
    public static Image jpegs;                                                  //файлы
    
    
    
 
    public ArrayList<String> getHTML(String urlToRead) {                                    //получаем сайт
        ArrayList<String> html = new ArrayList<String>();
        URL url;
        HttpsURLConnection conn;
        BufferedReader rd;
        try {
            url = new URL(urlToRead);
            conn = (HttpsURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            while(rd.readLine() != null) {
            html.add(rd.readLine());
            }
         
         rd.close();
      } catch (Exception e) {
         e.printStackTrace();
      }
      return html;
   }
   
   
   public ArrayList<String> poimeyArray(ArrayList<String> htmlArray){     //
       ArrayList<String> arrayPoimey = new ArrayList<String>();
       
       for(int i=0; i<htmlArray.size(); i++){ 
           if(htmlArray.get(i).contains(strSourceTag))                         ///вот тут нпе
               arrayPoimey.add(htmlArray.get(i));
       }
       return arrayPoimey;
   }
   
   
   /*
   public ArrayList<String> spaceDel(ArrayList<String> htmlArray){
        ArrayList<String> spaceDel = new ArrayList<String>();
        char s = ' ';
        char arr[];
        for(int i=0; i<htmlArray.size(); i++){ 
            for(int j=0; i<htmlArray.get(i).toCharArray().length; j++){ 
                arr = htmlArray.get(i).toCharArray().length;
            }
       }
       
   }*/
   
 
   public static void main(String args[]){
       
     PicParcer c = new PicParcer();
     strHtml = c.getHTML(strMainLink);
     links = c.poimeyArray(strHtml);
     
    /*
        for (String strHtml1 : strHtml) {
            System.out.println(strHtml1);
        }*/
        for (String link : links) {
            System.out.println(link);
        }
     
     System.out.println(strHtml.size());
     System.out.println(links.size());
   }
   
}


запускается буквально через раз, устал искать причину, помогите!
  • Вопрос задан
  • 156 просмотров
Решения вопроса 1
@raincons
А еще Вы половину строк теряете...
while(rd.readLine() != null) {    // прочитали 1-ю (3,5,7...) строку и сравнили с null
  html.add(rd.readLine());        // прочитали 2-ю (4,6,8...) строку и добавили в массив
}

А если строк было нечетное кол-во, последний элемент массива будет null...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@exenza
Добавьте проверку на ноль. JavaDoc, Stackoverflow
String htmlTag = htmlArray.get(i);
if (htmlTag != null && htmlTag.contains(strSourceTag))                         ///вот тут нпе
    arrayPoimey.add(htmlTag);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы