2016-01-25 103 views
0

我对下面的代码有问题。我的想法是检查我的字符串中的无效字符,然后再继续。但不知何故,我的involveInvalidChar-方法总是返回true,即使它不应该。该字符串只包含四个特定的大写字母。我检查是否有其他人参与。将字符数组中的字符与字符常量进行比较

public static int method (String someString) { 

    // array of characters from String  
    char[] charArray = someString.toCharArray(); 

    // are there invalid characters in the Array? 
    if (involvesInvalidChars(charArray)) { 
      return -1; 
    } 
... // code following 
} 

private static boolean involvesInvalidChars (char[] charArray) { 

    // for each char in the array  
    for (char ch : arrayOfChars) { 

    // check for invalid chars 
    if ((ch != 'A') || (ch != 'C') || ...) { 

     return true; 
    } 
    } 
    return false; 
} 

回答

0

(ch != 'A') || (ch != 'C')始终是千真万确的(没有char是a和c)。

||更改为&&

+0

谢谢!我现在感觉很愚蠢:) – suffi

0

1)

if ((ch != 'A') || (ch != 'C') || ...) { 

应该

if ((ch != 'A') && (ch != 'C') && ...) { 

因为你想无效字符任何字符,而不仅仅是一个字符。分别

for(char ch: arrayOfChars) 
    if((int)ch < 65 || (int) ch > 90) 
     return false; 

在这里,我们比较ASCII码,而不是每一个字符,这是书面形式,并以其他方式更有效:

2)有一个更简单的方式来做到这一点,大写字母,试试这个。你也可以在这个范围内添加小写字母等。

0

您应该更改无效字符检查:

// check for invalid chars 
if ((ch != 'A') && (ch != 'C') && ...) { 

    return true; 
} 

你目前的状况总是返回true

0

你申请一个有错误的方法来解决问题 -

  1. 你不应该在状态检查之间使用短路或操作员(||)。它总是返回true.You应该使用& &

  2. 您应该使用正则表达式来解决你的问题

    私有静态布尔involvesInvalidChars(字符串字符串)

    { 模式模式= Pattern.compile( “[ABCD]”);

    Matcher matcher = pattern.matcher(string); return matcher.find();

    }

相关问题