2014-05-02 24 views
2

我從文件中解析出文本並試圖查看時間。我首先需要檢查文本中是否有次。文中唯一一貫的模式是所有時間都被表示爲1或2個數字:2個數字。我寫了一些java代碼,看看我是否能夠發現我看到的字符串有一次或多次。Java:檢查字符串是否有一次或多次在其中

String timePattern = "\\d\\d?:\\d\\d"; 

if(textWithTime.matches(timePattern)){ 
System.out.println("MATCH"); 
} else { 
System.out.println("NO MATCH"); 
} 

然而,當我的字符串textWithTime等於像「06:45/07:52/10:27」,或「在06:22發生」據我所知,沒有匹配。如何檢查我的文本是否有時間模式?

回答

2

matches檢查整個字符串是否與已使用的正則表達式匹配,並且由於只有部分正則表達式可以匹配,因此會得到false

解決方法是在正則表達式的開始和結尾添加.*,以使它匹配匹配子字符串之前或之後的部分。

textWithTime.matches(".*\\d\\d?:\\d\\d.*"); 

但這種解決方案將不得不迭代字符串的所有字符來評估它。

更好的辦法是使用find()方法從Matcher類將停止迭代後的第一場比賽(或者將案件退回false在沒有正則表達式匹配可以發現)。

Pattern p = Pattern.compile("\\d\\d?:\\d\\d"); 
Matcher m = p.matcher(textWithTime); 
if (m.find()){ 
    System.out.println("MATCH"); 
} else { 
    System.out.println("NO MATCH"); 
} 
0

要找到這樣的模式你最好使用正則表達式,像這樣:

Pattern timePattern = Pattern.compile("[0-2][0-9]:[0-5][0-9]"); 

現在你可以創建一個Matcher看到這個Pattern是否在CharSequence中發現,像這樣:

Matcher timeMatcher = timePattern.matcher(textWithTime); 
while(timeMatcher.find()) { 
    System.out.println("Found time " + timeMatcher.group() + " in the text!"; 
} 

看一看the API for java.util.regex看到其它方法PatternMatcher提供。正則表達式非常強大。

相關問題