2016-07-03 96 views
2

我的代碼爲我得到「IndexOutOfBoundsException異常:沒有組4」當我嘗試打印所有組

String regexpr = "(abc)(ab)(cd)"; 
String test = "abcabcd"; 
Pattern p = Pattern.compile(regexpr); 
Matcher m = p.matcher(test); 
while(m.find()) 
{ 
    System.out.println(m.group()); 
} 

該代碼給出的輸出作爲

abcabcd

但我想打印所有組匹配的字符串即

group 1 abc 
group 2 ab 
group 3 cd 

在這個我試過

int i=1; 
while (m.group(i) != null) 
{ 
    System.out.println("group" + i + m.group(i)); 
    i++; 
} 

我越來越

group 1 abc 
group 2 ab 
group 3 cd 
Exception in thread "main" java.lang.IndexOutOfBoundsException: No group 4 

我怎樣才能避免這種例外?

如何打印所有組的起始索引和結束索引?

回答

1

您可以打印所有組的起始索引和結束索引

while (i<=m.groupCount()) 
     { 
      System.out.println("group" + i + m.group(i)); 
      System.out.println("starting index:" + m.start(i) + "Ending Index:" + m.end(i)); 
      i++; 
     } 
0

問題是,當遞增到4 i,你還在檢查:

m.group(i) != null 

但目前還沒有這樣的組4.

一個解決方案將使用Matcher#groupCount

while (i < m.groupCount() + 1) { 
    System.out.println("group " + i + ": " + m.group(i)); 
    i++; 
} 
+0

'我<= m.groupCount()'.. :) – rock321987

+0

@ rock321987正確,那是另一種選擇。 – Maroun

相關問題