2013-06-20 24 views
4

我有一個可變長度字符串,我只是想檢測這個字符串是否包含幾個字符。例如:如何檢測一個字符串包含使用java正則表達式的幾個字符之一

"sadsdd$sss^dee~" 

我要檢測這個字符串是否包含以下內容:$^~。我該如何使用Java string.matches

"sadsdd$sss^dee~".matches("[^+$+~+]"); 
+0

你需要分別循環每個字符。 –

+4

你的字符串是否需要包含所有'$''^''〜'字符或者一個就足夠了? – Pshemo

+0

一個就夠了... – user2506173

回答

1

如果你真的必須使用matches然後再嘗試這種方式

myString.matches(".*[$^~].*"); 

matches檢查,如果正則表達式可以完全匹配字符串,所以部分的旁邊你有興趣你也需要讓它前後匹配零件它,.*應該處理。

5

使用該模式和匹配:

Pattern pattern = Pattern.compile("[$~^]"); 
Matcher matcher = pattern.matcher(input); 
if (matcher.find()) { 
    // contains special characters 
} else { 
    // doesn't contain special characters 
} 
+0

@BalintBako:不需要在角色類中轉義。 – jlordo

+0

雖然這不是什麼OP要求它是更好的方法。 +1 – Pshemo

+0

@Pshemo:你認爲OP的問題是檢查所有3個字符的存在嗎? – jlordo

1

如何檢測,如果一個字符串包含在另一個字符串中的幾個人物之一:

如果你想有一個快速的解決方案:

public static void main(String[] args) { 
    System.out.println(containsChars("sadsdd$sss^dee~", "$^~")); 
} 

public static boolean containsChars(String str, String chars) { 
    for (int i = 0; i < chars.length(); i++) { 
     char c = chars.charAt(i); 
     for (int j = 0; j < str.length(); j++) { 
      if (c == str.charAt(j)) { 
       return true; 
      } 
     } 
    } 
    return false; 
} 

當然不像正則表達式那麼小或優雅,但速度很快。

+0

這看起來並不快,因爲如果字符串不包含任何字符,它需要進行m * n次迭代。這會比匹配正則表達式更好嗎(即使正則表達式是預編譯的)? – Jardo

+0

簡答:是的!正則表達式的更多fastes。 –

相關問題