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 Web サイトで部門のリストを取得することです。ページソースのように、部署名のパターンに一致する正規表現を使用しています。そして、Pattern オブジェクトと Matcher オブジェクトを使用して、正規表現に一致するこれらの部門名を find() して出力しようとしています。しかし、コードの実行には永遠に時間がかかります.bufferedReaderを使用してWebページを読み取るのにそれほど時間がかかるとは思いません. だから、私はひどく間違ったことをしているのか、ウェブサイトの解析に途方もなく長い時間がかかっていると思います. そのため、パフォーマンスを改善する方法やコードの間違いを修正する方法について、ご意見をいただければ幸いです。コードの書き方が悪くてすみません。