线程"main"中出现异常java.lang.IndexOutOfBoundsException:无组1

Mar*_*ark 3 java regex

我有这样的字符串

"abc:def"
Run Code Online (Sandbox Code Playgroud)

我需要检查它是否匹配.如果是,我想应用正则表达式并检索它的第一部分("abc").

这是我的尝试:

Pattern pattern = Pattern.compile(".*:.*");
String  name = "abc:def"
Matcher matcher = pattern.matcher(name);

if (matcher.find()) {
    String group = matcher.group(1);
    System.out.println(group);
}
Run Code Online (Sandbox Code Playgroud)

它给了我

线程"main"中的异常java.lang.IndexOutOfBoundsException:无组1

Tun*_*aki 6

您需要在正则表达式中添加捕获组.这是通过将您想要捕获的内容放在括号中来完成的:

Pattern pattern = Pattern.compile("(.*):.*"); // <-- parentheses here
String  name = "abc:def";
Matcher matcher = pattern.matcher(name);

if (matcher.find()) {
    String group = matcher.group(1);
    System.out.println(group); // prints "abc"
}
Run Code Online (Sandbox Code Playgroud)