gpt4 book ai didi

java - 使用 java matcher 类时出现非法状态异常

转载 作者:行者123 更新时间:2023-12-01 15:13:55 25 4
gpt4 key购买 nike

我正在尝试获取一个网页,使用 BufferedReader 将其加载到字符串生成器中,然后使用正则表达式来查找和检索单词或在本例中为单词组(部门名称,例如计算机科学、电气工程)等..)与正则表达式模式匹配。我正在使用 java 提供的 Pattern 和 Matcher 类,但遇到了非法状态异常。我已经盯着这段代码有一段时间了,希望对问题可能是什么有一些新的看法。我知道它与 m.find()m.group() 方法有关。任何帮助将不胜感激。

我想说,从我得到的输出来看,它识别出与正则表达式匹配的第一个单词,并在之后开始抛出非法状态异常。

我还在下面发布了我的代码:

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");
}
}
}
}

最佳答案

问题是你调用:

x = m.end();

即使您可能没有匹配。为什么不将对 find() 的调用合并到 while 语句中,从而使其也成为保护语句:

while (m.find()) {

关于java - 使用 java matcher 类时出现非法状态异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11915602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com