繁体   English   中英

使用Matcher.find()时出现IndexOutOfBoundsException

[英]IndexOutOfBoundsException when using Matcher.find()

此Java程序在尝试调用group(1)时向我显示IndexOutOfBoundsException。 如果将1替换为0则将打印整行。我该怎么办?

Pattern pattern = Pattern.compile("<abhi> abhinesh </abhi>");
Matcher matcher = pattern.matcher("<abhi> abhinesh </abhi>");
if (matcher.find())
    System.out.println(matcher.group(1));
else
    System.out.println("Not found");

索引从0开始,所以使用matcher.group(0)

编辑:要匹配标签之间的文本,请使用此正则表达式<abhi>(.*)<\\\\/abhi>

这篇文章可能会进一步阐明您的问题。 对Matcher Group感到困惑

简而言之,您尚未定义任何正则表达式分组来引用备用组。 您只有完整的匹配字符串。

在下面,如果您尝试添加分组的正则表达式来解析xml,则会发现0具有完整字符串,1具有begin标记,2具有值,以及3具有end标记。

Pattern pattern = Pattern.compile("<([a-z]+)>([a-z ]+)</([a-z]+)>");
Matcher matcher = pattern.matcher("<abhi> abhinesh </abhi>");

if (matcher.find()){
    System.out.println(matcher.group(0));//<abhi> abhinesh </abhi>
    System.out.println(matcher.group(1));//abhi
    System.out.println(matcher.group(2));// abhinesh 
    System.out.println(matcher.group(3));//abhi
}else{
    System.out.println("Not found");
}

试试这个正则表达式:

<abhi>(.*)<\\/abhi>

您需要的文本将存储在第一个捕获组中。

例:

    String regex = "<abhi>(.*)<\\/abhi>";
    String input = "<abhi>foo</abhi>";
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(input);
    if (m.find()) {
        System.out.println(m.group(1));
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM