2011-08-23 51 views
1

我正在使用以下代碼來獲取字符串中存在的整數。但是這會首次出現整數。只需打印14.我需要獲取所有整數。有什麼建議麼。如何獲取字符串中存在的所有整數?

Pattern intsOnly = Pattern.compile("\\d+"); 
      Matcher makeMatch = intsOnly.matcher("hello14 hai22. I am here 4522"); 
      makeMatch.find(); 
      String inputInt = makeMatch.group(); 

回答

2
Pattern intsOnly = Pattern.compile("\\d+"); 
Matcher makeMatch = intsOnly.matcher("hello14 hai22. I am here 4522"); 
String inputInt = null; 
while(makeMatch.find()) { 
    inputInt = makeMatch.group(); 
    System.out.println(inputInt); 
} 
+0

這不會打印第一個匹配項。請使用'do..while'來代替。 –

+0

它會的。如果沒有匹配,使用'do ... while'會引發異常。 –

+0

@ Harry Joy它工作正常。 – Manikandan

4

提示:不要你需要循環得到所有的數字?

+1

+1不僅僅是在OP上拋出代碼。 – mre

+0

@mre你說得對。我一直忘記作業問題。 –

1
List<Integer> allIntegers = new ArrayList<Integer>(); 
while(matcher.find()){ 
    allIntegers.add(Integer.valueOf(matcher.group)); 
} 
1

this nice tutorial on Regular Expressions in Java

要找到目標字符串的正則表達式的第一場比賽,調用myMatcher.find()。要查找下一個匹配項,請再次調用myMatcher.find()。當myMatcher.find()返回false時,表示沒有進一步匹配,下次調用myMatcher.find()將再次找到第一個匹配項。當find()失敗時,匹配器會自動重置爲字符串的開頭。

I.e.您可以使用以下代碼:

while (makeMatch.find()) { 
    String inputInt = makeMatch.group(); 
    // do something with inputInt 
} 
+0

或者參閱「官方」Java教程[正則表達式](http://download.oracle.com/javase/tutorial/essential/regex/index.html)教程。 – mre

相關問題