2015-10-17 31 views
0
同一行

我在一類針對其目的是在文本行(串)查找,並找到其中包含某些所有字符串或子串的工作匹配多個子串在這種情況下,字符「ABC123」。匹配器類的Java - 在

我已經寫了一部分當前的代碼工作,但只發現在一個文本行的第一子串......換句話說,如果文本的,它是在看線包含包含多個子串「ABC123」,它只查找並返回第一個子字符串。

如何修改代碼,以便它找到的文本行內的所有子?

下面我當前的代碼:

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
//For grabbing the Sub-string and separating it with white space 


public class GrabBLSubString { 
    public static void main(String[] args) { 
     test("Viuhaskfdksjfkds ABC1234975723434 fkdsjkfjaksjfklsdakldjsen ABC123xyxyxyxyxyxyxyxyxyx"); 
     test("ABC1234975723434"); 
     test("Viuhaskfdksjfkds APLIC4975723434 fkdsjkfjaksjfklsdakldjsen"); 
     test("abc ABC12349-75(723)4$34 xyz"); 
    } 
    private static void test(String text) { 
     Matcher m = Pattern.compile("\\bABC123.*?\\b").matcher(text);//"\\bABC123.*?\\b"____Word boundary // (?<=^|\s)ABC123\S*__For White spaces 
     if (m.find()) { 
      System.out.println(m.group()); 
     } else { 
      System.out.println("Not found: " + text); 
     } 
    } 
} 

正如你所看到的,這個代碼返回如下:

APLU4975723434 
APLU4975723434 
Not found: Viuhaskfdksjfkds APLIC4975723434 fkdsjkfjaksjfklsdakldjsen 
APLU49 

,並沒有找到(我想要它!)文本「 ABC123xyxyxyxyxyxyxyxyxyxyxyx「在第一行。

感謝您的幫助!

回答

0

使用您if塊內循環覆蓋測試繩子的其他實例。

if (m.find()) { 
    System.out.print(m.group() + " "); 
    while (m.find()) { 
     System.out.print(m.group() + " "); 
    } 
} else { 
    System.out.println("Not found: " + text); 
}