Почему сканирование сайта длится вечно?

public class Parser {

    public static void main(String[] args) {
        Parser p = new Parser();
        p.matchString();
    }

    parserObject courseObject = new parserObject();
    ArrayList<parserObject> courseObjects = new ArrayList<parserObject>();
    ArrayList<String> courseNames = new ArrayList<String>();
    String theWebPage = " ";

    {
        try {
            URL theUrl = new URL("http://ocw.mit.edu/courses/");
            BufferedReader reader =
                new BufferedReader(new InputStreamReader(theUrl.openStream()));
            String str = null;

            while((str = reader.readLine()) != null) {
                theWebPage = theWebPage + " " + str;
            }
            reader.close();

        } catch (MalformedURLException e) {
            // do nothing
        } catch (IOException e) {
            // do nothing
        }
    }

    public void matchString() {
        // this is my regex that I am using to compare strings on input page
        String matchRegex = "#\\w+(-\\w+)+";

        Pattern p = Pattern.compile(matchRegex);
        Matcher m = p.matcher(theWebPage);

        int i = 0;
        while (!m.hitEnd()) {
            try {
                System.out.println(m.group());
                courseNames.add(i, m.group());
                i++;
            } catch (IllegalStateException e) {
                // do nothing
            }
        }
    }
}

Чего я пытаюсь добиться с помощью приведенного выше кода, так это получить список отделов на веб-сайте MIT OpencourseWare. Я использую регулярное выражение, которое соответствует шаблону имен отделов, как в исходном коде страницы. И я использую объект Pattern и объект Matcher и пытаюсь найти ()и напечатать эти названия отделов, которые соответствуют регулярному выражению. Но код выполняется вечно, и я не думаю, что чтение веб-страницы с использованием bufferedReader занимает так много времени. Поэтому я думаю, что либо делаю что-то ужасно неправильное, либо анализ веб-сайтов занимает смехотворно много времени. поэтому я был бы признателен за любую информацию о том, как улучшить производительность или исправить ошибку в моем коде, если таковая имеется. Прошу прощения за плохо написанный код.

5
задан Stuart Marks 2 June 2014 в 17:36
поделиться