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 занимает так много времени. Поэтому я думаю, что либо делаю что-то ужасно неправильное, либо анализ веб-сайтов занимает смехотворно много времени. поэтому я был бы признателен за любую информацию о том, как улучшить производительность или исправить ошибку в моем коде, если таковая имеется. Прошу прощения за плохо написанный код.