2011-10-31 38 views
0

據我所知,Java正則表達式可以通過Stringmatches便利方法訪問,或者走長途路線並製作Pattern等。因此,下面的代碼應該真正打印2「是的! 「線路輸出。它打印「是的!」線和「否」線。我錯過了什麼?Java非常簡單的正則表達式拼圖

import java.util.regex.*; 

public class TestRegex { 
public static void main(String[] args) { 
    String pattern = "html"; 
    String input = "somehtml.txt"; 

    Pattern p = Pattern.compile(pattern); 
    Matcher m = p.matcher(input); 

    if(m.find()) { 
     System.out.println("Yes!"); 
    } 
    else { 
     System.out.println("no"); 
    } 

    if(input.matches(pattern)) { 
     System.out.println("Yes!"); 
    } 
    else { 
     System.out.println("no"); 
    } 

} 

} 

輸出:Win7上64位

Yes! 
no 

Java版本1.6。

C:\用戶\邁克爾史密斯> Java的版本 Java版本 「1.6.0_24」 的Java(TM)SE運行時環境(建立1.6.0_24-B07) 爪哇熱點(TM)64位服務器VM (構建19.1-b02,混合模式)

回答

5

matches()檢查與正則表達式匹配的整個字符串。 find()只在字符串中的某個地方查找匹配項。

2

String#Matches方法檢查整個輸入文本的模式。這是您的代碼第二次打印no的原因。 Matcher#Find掃描輸入以在輸入中查找下一個匹配的 子序列。