2013-10-16 87 views
4

從字符串中提取文本我有一個文本串「9926 9928 9951 9953 0 30 57 12 40 54 30」爪哇 - 通過共同的長度和前綴

我感興趣的4位數字,99前綴。其他數字是多餘的。

所需的輸出:

9926 
9928 
9951 
9953 

我的代碼:

String str = " 9926 9928 9951 9953 0 30 57 12 40 54 30"; 
Iterable<String> result = Splitter.onPattern("99").fixedLength(4).split(str); 

實際輸出:

992 
6 99 
28 9 
951 
9953 
0 3 
0 57 
12 
40 5 
4 30 

回答

4

使用Matcher與正則表達式99\d{2}

String str = " 9926 9928 9951 9953 0 30 57 12 40 54 30"; 

Matcher m = Pattern.compile("99\\d{2}").matcher(str); 

while (m.find()) 
    System.out.println(m.group()); 
 
9926 
9928 
9951 
9953 

參見:Pattern

注意,在正則表達式\dpredefined character class相當於[0-9]。此外,{2}quantifier,意思是「無論先於,無論兩次」。所以,99\d{2}匹配兩個9秒,然後任意兩個數字:

Regular expression visualization

Debuggex Demo

如果你要會做很多不同的字符串此操作,考慮預編譯正則表達式和存儲static final變量中的Pattern實例,使用該變量隨時可以執行該操作。

1

你可以使用下面的算法去做你的東西。

  1. 將字符串拆分爲whitespace字符。
  2. 對於每個拆分的字符串,請檢查長度。如果它的4,你需要進一步檢查該字符串,否則丟棄它。
  3. 如果前2個字符是「99」,那麼可以使用startsWith()方法,那麼它就是你需要的數字。
  4. 將上述字符串(滿足條件3)解析爲一個整數並將其存儲在數組或列表中。
  5. 繼續,直到有更多的字符串。
  6. 顯示包含所需項目的最終數組/列表。