Ошибка индекса строки вне диапазона при сканировании

Я продолжаю получать сообщение об ошибке с моей программой после того, как она сканирует первые 2 URL-адреса "Исключение в потоке"AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index вне диапазона: 0". Первые пару URL-адресов просматриваются так, как я хочу, и я получаю текст от них, используя метод из другого класса. Другой класс может быть проблемой, которую я не знаю. Пожалуйста, посмотрите на мой код и посмотрите, что происходит.

package WebCrawler;

import java.util.Scanner;
import java.util.ArrayList;

import static TextAnalyser.Textanalyser.analyse;

public class Crawler {

    public static void main(String[] args) {
        //   java.util.Scanner input = new java.util.Scanner(System.in);
        //  System.out.print("Enter a URL: ");
        //  String url = input.nextLine();
        crawler("http://www.port.ac.uk/"); // Traverse the Web from the a starting url 
    }

    public static void crawler(String startingURL) {
        ArrayList<String> listOfPendingURLs = new ArrayList<String>();
        ArrayList<String> listOfTraversedURLs = new ArrayList<String>();

        listOfPendingURLs.add(startingURL);
        while (!listOfPendingURLs.isEmpty() && listOfTraversedURLs.size() <= 100) {
            String urlString = listOfPendingURLs.remove(0);

            if (!listOfTraversedURLs.contains(urlString)) {
                listOfTraversedURLs.add(urlString);
                String text = urlString;
                text = ReadTextfromURL.gettext(text);
                text = analyse(text);
                System.out.println("text : " + text);
                System.out.println("Craw " + urlString);

                for (String s: getSubURLs(urlString)) {
                    if (!listOfTraversedURLs.contains(s)) {
                        listOfPendingURLs.add(s);
                    }
                }
            }
        }
    }

    public static ArrayList<String> getSubURLs(String urlString) {
        ArrayList <String> list = new ArrayList<String>();

        try {
            java.net.URL url = new java.net.URL(urlString);
            Scanner input = new Scanner(url.openStream());
            int current = 0;
            while (input.hasNext()) {
                String line = input.nextLine();
                current = line.indexOf("http:", current);
                while (current > 0) {
                    int endIndex = line.indexOf("\"", current);
                    if (endIndex > 0) { // Ensure that a correct URL is found 
                        list.add(line.substring(current, endIndex));
                        current = line.indexOf("http:", endIndex);
                    } else {
                        current = -1;
                    }
                }
            }
        } catch (Exception ex) {
            System.out.println("Error: " + ex.getMessage());
        }

        return list;
    }
}

0 ответов

Другие вопросы по тегам