在课堂内我有一个模式private Pattern lossWer = Pattern.compile("^\\d+ \\d+ (\\d+).*")
。其中一个功能如下:
public double[] getWer(){
double[] wer = new double[someStrings.size()];
Matcher m;
for(int i = 0; i < wer.length; i++){
m = lossWer.matcher(someStrings.get(i));
wer[i] = Double.parseDouble(m.group(1));
}
return wer;
}
使用java.lang.IllegalStateException: No match found
调用此方法失败。但是,当我将其更改为此时,它可以正常工作:
public double[] getWer(){
double[] wer = new double[someStrings.size()];
Matcher m;
for(int i = 0; i < wer.length; i++){
m = lossWer.matcher(someStrings.get(i));
if(!m.matches())
;
wer[i] = Double.parseDouble(m.group(1));
}
return wer;
}
当然我的应用程序不只是为该行使用空格分号,但我说明这里的行什么都不做但只允许程序继续进行而不会出错。为什么第二个示例中的行匹配没有错误,而第一个示例中没有;
答案 0 :(得分:4)
答案 1 :(得分:3)
检查this是否存在IllegalStateException
匹配器的显式状态最初是未定义的;试图 在成功匹配之前查询它的任何部分将导致 抛出IllegalStateException。匹配器的显式状态是 每次比赛操作重新计算。
这与Ryan的回答相结合,可以满足您的需求。
答案 2 :(得分:1)
在致电m.matches()
之前,您尚未测试正则表达式,因此没有任何组。
你说在那条线上,对正则表达式进行测试。如果没有匹配什么都不做,那么你继续检查匹配的组(1)(因为它与一个组有匹配)。
最好改变:
if(!m.matches())
;
wer[i] = Double.parseDouble(m.group(1));
要:
if(m.matches())
wer[i] = Double.parseDouble(m.group(1));
或使用!m.matches()
返回错误或其他内容。您的选择:)