2014-11-04 130 views
0
String abc = "||:::|:|::"; 

如果出現兩個|和三個:,它應該返回true。
我不知道如何使用「正則表達式」,或者如果它是正確的使用方法。 abc字符串中沒有特定的模式。如何查找字符串中的兩個特定字符?

+0

你的意思是它應該返回'true',如果它包含'|| :::',或者它包含'||'和':::'而不管順序或位置('::: ||'或':||:| :::'...)? – MadProgrammer 2014-11-04 22:59:21

+0

是真的,如果它包含|和:不管位置 – user3413152 2014-11-04 23:00:23

+2

是'::|:|:「'還正確(它包含兩個'|'和三個':')? – Pshemo 2014-11-04 23:02:19

回答

0

這是假設你正在尋找兩個'|'一個接一個,三個一樣「:' 一個接着另一個。使用下面的單個正則表達式。

".*||.*:::.*" 

如果你正在尋找只是檢查字符的存在和他們不論其順序,然後使用使用兩個正則表達式String.matches方法與邏輯與

".*|.*|.*" 

".*:.*:.*:.*" 

這裏是一個cheat sheet for regular expressions。學習起來相當簡單。查看文檔中的組和量詞來理解上述表達式。

+0

誰說'''必須放在':::'之前?在[這個評論](http://stackoverflow.com/questions/26746658/how-can-i-look-for-two-specific-characters-in-a-string#comment42078572_26746658)OP聲明「包含|和:無論的位置「。 – Pshemo 2014-11-04 23:06:17

0

使用正則表達式是一個壞主意,特別是如果沒有特定的順序給他們。作出這樣的計數次數的字符sppears在一個字符串的函數,並使用:

public int count(String base, char toFind) 
{ 
    int count = 0; 
    char[] haystack = base.toCharArray(); 
    for (int i = 0; i < haystack.length; i++) 
     if (haystack[i] == toFind) 
      count++; 
    return count; 
} 

String abc = "||:::|:|::"; 
if (count(abc,"|") >= 2 && count(abc,":") >= 3) 
{ 
    //Do some code here 
} 
0

我最喜歡的用於搜索字符的字符串數量的方法是int num = s.length() - s.replaceAll("|","").length();你能做到這一點同時適用於和測試這些整數。

0

如果你想測試一個正則表達式中的所有條件,你可以使用look-ahead(?=condition)

你的正則表達式可以像

String regex = 
     "(?=(.*[|]){2})"//contains two | 
     + "(?=(.*:){3})"//contains three : 
     + "[|:]+";//is build only from : and | characters 

現在你可以用matches使用它像

String abc = "||:::|:|::"; 
System.out.println(abc.matches(regex));//true 

abc = "|::::::"; 
System.out.println(abc.matches(regex));//false 

無論如何,我可以避開正則表達式,寫自己的方法,將計算的數|:,並檢查這個數字是否大於或等於2和3.您可以使用中的所以你的測試代碼可能看起來像

public static boolean testString(String s){ 
    int pipes = StringUtils.countMatches(s, "|"); 
    int colons = StringUtils.countMatches(s, ":"); 
    return pipes>=2 && colons>=3; 
} 

public static boolean testString(String s){ 
    return  StringUtils.countMatches(s, "|")>=2 
      && StringUtils.countMatches(s, ":")>=3; 
} 
0

沒有測試,但這應該工作

Pattern.compile("^(?=.*[|]{2,})(?=.*[:]{3,})$"); 

整個字符串由?=.*閱讀並檢查羯羊允許的字符(|)至少出現兩次。然後爲:做了同樣的事情,只有這個必須至少匹配三次。

+0

檢查了它,似乎沒有工作。 – 2014-11-05 00:45:37

相關問題