Web ページを取得し、BufferedReader を使用して文字列ビルダーにロードし、正規表現を使用して単語またはこの場合は単語のグループ (コンピューター サイエンス、電気工学などの部門名) を検索して取得しようとしています。 ) 正規表現パターンに一致します。Java が提供する Pattern および Matcher クラスを使用していますが、 illegalStateException が発生しています。私はかなり長い間このコードを見つめてきましたが、何が問題なのかについて新鮮な視点を求めています。m.find()およびm.group()メソッドと関係があることはわかっています。どんな助けでも大歓迎です。
私が得ている出力から、それは正規表現に一致する最初の単語を認識し、その後に illegalStateException をスローし始めます。
以下のコードも投稿しました。
public class Parser{
static StringBuilder theWebPage;
ArrayList<String> courseNames;
//ArrayList<parserObject> courseObjects;
public static void main(String[] args)
{
Parser p = new Parser();
theWebPage = new StringBuilder();
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.append(" ").append(str);
//System.out.println(theWebPage);
}
//System.out.println(theWebPage);
reader.close();
} catch (MalformedURLException e) {
System.out.println("MalformedURLException");
} catch (IOException e) {
System.out.println("IOException");
}
p.matchString();
}
public Parser()
{
//parserObject courseObject = new parserObject();
//courseObjects = new ArrayList<parserObject>();
courseNames = new ArrayList<String>();
//theWebPage=" ";
}
public void matchString()
{
String matchRegex = "#\\w+(-\\w+)+";
Pattern p = Pattern.compile(matchRegex);
Matcher m = p.matcher(theWebPage);
int i=0;
int x=0;
//m.reset();
while(!(m.matches()))
{
System.out.println("inside matches method " + i);
try{
m.find();
x = m.end();
System.out.println( m.group());
PrintStream out = new PrintStream(new FileOutputStream("/Users/xxxx/Desktop/output.txt"));
System.setOut(out);
//courseNames.add(i,m.group());
i++;
}catch(IllegalStateException e)
{
System.out.println("IllegalStateException");
} catch (FileNotFoundException e) {
System.out.println("FileNotFound Exception");
}
}
}
}