gpt4 book ai didi

Java - 匹配器在访问组后抛出 IllegalStateException

转载 作者:行者123 更新时间:2023-11-29 03:08:51 25 4
gpt4 key购买 nike

我正在尝试为我的项目编写简单的命令解析器类。这是我拥有的:

主.java

public static void main(String[] args) {
CmdParser p = new CmdParser(args);
String st = p.getSourceType();
}

CmdParser.java

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CmdParser {

private String[] args;

public CmdParser(String[] args) {
this.args = args;
}

public String getSourceType() throws ParseException {
ArrayList<String> sourceTypes = new ArrayList<String>();
Pattern p = Pattern.compile("--source-type=([^\\s]+)");
for (String s : args) {
Matcher m = p.matcher(s);
if (m.groupCount() == 1) {
sourceTypes.add(m.group(1)); //line 28
}
}
return sourceTypes.get(0);
}
}

使用 java Main --source-type=test 运行它会导致以下输出:

Exception in thread "main" java.lang.IllegalStateException: No match found
at java.util.regex.Matcher.group(Matcher.java:536)
at CmdParser.getSourceType(CmdParser.java:28)
at Main.main(Main.java:11)

我评论了上面的第 28 行。即使 groupCount 为 1,那怎么可能是正确的组索引,在这种情况下 java 会抛出 IllegalStateException?另外,为什么找不到模式?

最佳答案

你需要使用:

if (m.find() && m.groupCount() == 1) {
sourceTypes.add(m.group(1)); //line 28
}

即在 group() 方法之前调用 findmatches

关于Java - 匹配器在访问组后抛出 IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30581103/

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