2013-11-26 50 views
1

我有一個字符串,我想檢查它是否包含一些特定的字符。如果它包含此字符,則會出現錯誤信息。如何使用正則表達式掃描特定的字符串?

我有一個想法,並計劃與班「模式」和「匹配器」的工作:

public boolean sourceIncludesValidCharacters(String sourceToScan, String searchCharacter) { 

    boolean sourceIncludesValidCharacters = true; 

    if (StringUtils.isBlank(sourceToScan)) { 
     sourceIncludesValidCharacters = false; 
    } else { 
     Pattern pattern = Pattern.compile(searchCharacter); 
     Matcher matcher = pattern.matcher(sourceToScan); 
     sourceIncludesValidCharacters = !matcher.find(); 
    } 
    return sourceIncludesValidCharacters; 
} 

現在我需要一種正則表達式來檢查我的字符串(或者換句話說,參數「 。sourceToScan」正則表達式muste過濾像[]/{}%$§標牌等...

我怎麼能實現在例如該解決方案

回答

3

使用String#contains,無需正則表達式在這裏:

String[] mySpecialChars = ....; //I advise to make it constant 
for(String special : mySpecialChars) { 
    if(myStr.contains(special)) { 
     //error 
    } 
} 

你可以把這個方法裏面有一個比較清晰的解決方案:

private boolean containsSpecialChars(String myStr) { 
    String[] mySpecialChars = ....; 
    for(String special : mySpecialChars) { 
     if(myStr.contains(special)) { 
      return false; 
     } 
    } 
    return true; 
} 

注意:正則表達式是合適的,你有一些模式的情況下使用。在這種情況下,您只需檢查字符串中是否存在某個字符,而不是使用任何特殊/特定模式。這就是爲什麼在這裏使用正則表達式不太合適。

+0

但這個解決方案有點不美觀。我想與Pattern和Matcher類一起工作,所以我不需要任何類型的循環來解決這個問題 – Marwief

+0

['String#contains'](http://docs.oracle.com/javase/7/docs/ api/java/lang/String.html#contains(java.lang.CharSequence))被髮明用於這樣的情況。我不認爲這不是很美,你可以用'containsSpecialChars'方法寫這個,然後就完成了。 – Maroun

+0

好吧,但我如何初始化數組字符串[] mySpecialChars? – Marwief

1

爲了詳細闡述有關清潔度,)string.contains的比較(方法和正則表達式的方法,用String.contains():

String specialChars[] = {"]", "["}; 

for (String char: specialChars) { 
    if (targetString.contains(char)) { 
     return false; 
    } 
} 
return true; 

並與正則表達式

String specialCharsPattern = ".*[\\]\\[].*"; 

if (targetString.matches(specialCharsPattern)) { 
    return false; 
} 
return true; 

實例:

class Match { 
    public static void main(String args[]) { 
     String str = "test[me"; 
     System.out.println(str + ": " + containsSpecialCharsRegEx(str)); 
     System.out.println(str + ": " + containsSpecialCharsContains(str)); 
    } 
    public static boolean containsSpecialCharsRegEx(String targetString) { 
     final String specialCharsPattern = ".*[\\]\\[].*"; // for the symbols [ and ] in this example 

     if (targetString.matches(specialCharsPattern)) { 
      return true; 
     } 
     return false; 
    } 
    public static boolean containsSpecialCharsContains(String targetString) { 
     final String[] specialCharsArr = {"]", "["}; // for the symbols [ and ] in this example 

     for (String specialChar: specialCharsArr) { 
      if (targetString.contains(specialChar)) { 
       return true; 
      } 
     } 
     return false; 
    } 
} 

我當然認爲與.contains它更清潔,更容易理解。

相關問題