2011-10-16 57 views
2

如何檢查字符數組中字符串中的每個字符?例如,我想檢查這些字符:!,@,#,$,%,^,&,*,(,),_,+而不是字符串af!a$co。雖然沒有正則表達式。如何檢查字符數組中的每個字符?

這是否有意義?

public boolean IllSymbols(String newString) 
{ 
    char [] data = {'!', '#', '$', '%', '^', '&', '*', '(', ')' }; 
    String str = new String(data); 
    for (int i=0; i<str.length(); i++) 
    { 
     for (int j=0; j<local.length(); j++) 
     { 
     if (str.charAt(i)==local.charAt(j)) 
     { 
      return true; 
     } 

     } 

    } 
    return false; 
} 

但是,當我在我的主要方法

if (IllSymbols(newString)==true) 
{ 
    return false; // false = text is illegal 
} 
else 
{ 
    return true; // true = text is legal 
} 

檢字af!a$co魔鬼返回字符串爲「真」,這意味着它是一個合法的字符串。也許我做錯了什麼?

+1

你的代碼的最後一塊是相當笨拙。它可以簡化爲'return!IllSymbols(newString);'。複雜的布爾邏輯,是吧? :) – BalusC

+3

你的代碼不會查看傳入的字符串。它將str比較爲local,而不是newString。 –

回答

3
public boolean hasIllegalCharacters(String newString) { 
    boolean hasIllegalChars = false; 
    char[] illegalChars = {'!', '#', '$', '%', '^', '&', '*', '(', ')' }; 

    for (int i = 0; i < newString.length; i++) { 
    for (int j = 0; j < illegalChars.length; j++) { 
     if (newString.charAt(i) == illgalChars[j]) { 
     hasIllegalChars = true; 
     } 
    } 
    } 

    return hasIllegalChars; 
} 

這裏的想法是,你首先假設它將是假的,並且只有當你發現非法字符時纔將它設置爲真。

如果您想在找到第一個非法字符後立即返回,那麼在行hasIllegalChars = true;後面,您可以添加break;語句。

要看看相反的情況下,如果你想返回true 只有newString包含不過非法字符,那麼你可以翻轉過來,事情,假設這是真的,並初始化hasIllegalCharstrue開始,然後如果有的話是非法字符是將它設置爲false嵌套for環內,與此代碼(for循環和方法聲明是一樣的):

hasIllegalCharacters = true; 

    ...nested for loops... 
    if (newString.charAt(i) != illegalChars[j]) { 
     hasIllegalChars = false; 
     // optional "break;" or "return false;" statement here 
    } 
    ... 

    return hasIllegalChars; 

...但在這種情況下,我會建議將方法重命名爲「isAllIllegalCharacters」或類似的東西。

+1

或者,如果您想要在找到非法字符時立即返回,而不是在退貨中放置。 – Jeffrey

+0

啊,當然是。回報也會起作用。 :P – jefflunt

+0

謝謝,它工作:) –

1
public boolean illSymbols(String newString) { 
    char [] data = {'!', '#', '$', '%', '^', '&', '*', '(', ')' }; 
    for(int i=0; i<data.length; i++) { 
     if(newString.indexOf(data[i]) > -1) { // if the string contains the character 
      return false;      // return false 
     } 
    } 
    return true; 
} 
1

你們是不是要檢查是否存在String包含任何字符!@#$%^&*()_+,在這種情況下,這是非法的?爲了簡單易用和理解,我建議GuavaCharMatcher類。

private static final CharMatcher ILLEGAL_SYMBOLS = 
    CharMatcher.anyOf("[email protected]#$%^&*()_+"); 

public boolean isLegal(String string) { 
    return ILLEGAL_SYMBOLS.matchesNoneOf(string); 
} 
0

我更喜歡使用。載有()

.... 

for(int i=0; i < check.length; i++){ 

    for(int j=0; j < illegalChar.length; i++){ 
     if(check[i].contains(illegalChar[j]) 
     return false; 
    } 

} 

return true; 

.... 
相關問題