簡體   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