2013-05-22 313 views
0

我正在使用Java 6.我有一個包含「特殊」字符的字符串 - 「!@#$%^ & *()_」。如何編寫Java表達式來檢查另一個字符串「password」是否至少包含第一個字符串中定義的一個字符?我有如何檢查一個字符串是否至少包含另一個字符串中的一個字符?

regForm.getPassword().matches(".*[\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\_\\+].*") 

但我不想對特殊字符進行硬編碼,而是將它們從屬性文件加載到字符串中。所以我很難找出如何從文件中加載後正確地轉義所有內容。

+0

怎麼樣把所有信件,一個ArrayList和單詞的第二個字母到另一個數組列表?那麼你將迭代來自一個列表中的字母,並調用是否在第二個列表中包含(元素)? – deadfish

回答

11

您可以嘗試使用Pattern.quote從包含特殊字符和轉義符號的字符串創建正則表達式。試試這個:

String special = "[email protected]#$%^&*()_"; 
String pattern = ".*[" + Pattern.quote(special) + "].*"; 
regFrom.getPassword().matches(pattern); 
+0

我得到了類似的,建立模式,然後做一個'password.replaceAll(pattern,「」)'然後比較長度。但你的更好。 +1 – Kent

+0

由於方括號內的'Pattern.quote'(字符'\ Q'和'\ E'),此解決方案可能無法正常工作。 – anubhava

+0

@Nikita,哪個java版本有這個方法? –

0

一種選擇是使用StringTokenizer,看看如果返回超過1串。它有一個構造函數,允許指定要拆分的字符。

無論如何,我最喜歡的選擇只是迭代字符和使用String.indexOf

2

我想簡單循環的正則表達式來檢查每個字符可能會更好地工作,併爲所有的情況下工作:

String special = "[email protected]#$%^&*()_"; 
boolean found = false; 
for (int i=0; i<special.length(); i++) { 
    if (regFrom.getPassword().indexOf(special.charAt(i)) > 0) { 
     found = true; 
     break; 
    } 
} 
if (found) { // password has one of the allowed characters 
    //... 
    //... 
} 
+0

解決方案工作得很好,但爲什麼要重新發明輪子? –

+0

我可以知道嗎哪個輪子被這個答案改造了? – anubhava

+0

我的意思是說什麼時候可以通過正則表達式很容易實現,然後我認爲我們不需要編寫代碼,您怎麼看? '正則表達式很容易實現' –

相關問題