2014-02-07 151 views
0

我想檢查輸入的特定單詞是否在字符串中。我用下面的代碼:搜索指定單詞的字符串

import java.util.*; 
import java.io.*; 

public class StringTest { 
    public static void main(String[] args) { 
     Scanner s = new Scanner(System.in); 
     String s1; 
     s1 = s.next(); 
     String s2 = "this is an accomplishment"; 
     if (s2.contains(s1)) { 
      System.out.println("you have done it"); 

     } else 
      System.out.println("try another word"); 
    } 
} 

如果我輸入單詞「COM」我得到的結果

你都做到了

但「COM」其實只是一部分「成就」一詞。我想要的結果在這種情況下是

嘗試另一個字

因爲s2不包含完整的單詞「COM」。我也試過indexOf(),但是這也給出了相同的結果。我應該怎樣進行?

回答

2

最好的正則表達式的方法可能是

Pattern p = Pattern.compile("\\b" + Pattern.quote(s1) + "\\b"); 
if (p.matcher(s2).find()) { ... } 

它處理字邊界和逃逸。請注意,編譯一個模式並不是免費的。

0

在地方的if(s2.contains(s1)),使用此代碼:

if(Pattern.compile("\\b" + s1 + "\\b").matcher(s2).find()) 

確保import java.util.regex.Pattern;

它將搜索在s2整個單詞匹配s1。欲瞭解更多信息,請參閱以下網頁:

或者,你可以使用

if(s2.matches(".*\\b" + s1 + "\\b.*")) 
1

Read up on the API for String

特別注意包含()的是什麼。如果序列出現在字符串中,則匹配。它無法區分該字符串中的單獨單詞。只要'com'出現在該字符串中的任何位置,contains()就會返回true。你期望它只匹配整個單詞,其中包含()不會。

如果給定的字符串出現在空白或標點符號周圍,可以使用正則表達式進行匹配。試試Regular Expressions上的Java教程。

或者,更簡單地說,您可以將字符串沿着空格分開。 String方法split()或其他Scanner可以很容易地做到這一點。這將爲您提供由Scanner類稱爲「令牌」的單詞,作爲String類的實例。之後,改爲使用contains(),使用equals()。正則表達式也可以做到這一點,但他們開始學習更費力(但完全值得)。