Java 将字符数组中的字符与字符常量进行比较

Java 将字符数组中的字符与字符常量进行比较,java,arrays,string,char,logical-operators,Java,Arrays,String,Char,Logical Operators,我对以下代码有问题。我的想法是在继续之前检查字符串中的无效字符。但不知何故,我的involvesInvalidChar方法总是返回true,即使它不应该返回true。字符串仅由四个特定的大写字母组成。我正在检查是否还有其他人参与 public static int method (String someString) { // array of characters from String char[] charArray = someString.toCharArray();

我对以下代码有问题。我的想法是在继续之前检查字符串中的无效字符。但不知何故,我的involvesInvalidChar方法总是返回true,即使它不应该返回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;
}
(ch!='A')|(ch!='C')
确实总是正确的(没有
char
表示A和C)

|
更改为
&

1)

应该是

if ((ch != 'A') && (ch != 'C') && ...) {
因为您希望无效字符不是任何字符,而不仅仅是一个字符

2) 有一种更简单的方法可以做到这一点,对于大写字母,请尝试以下方法:

for(char ch: arrayOfChars)
    if((int)ch < 65 || (int) ch > 90)
        return false;
for(字符ch:arrayOfChars)
如果((int)ch<65 | |(int)ch>90)
返回false;

在这里,我们比较ASCII码而不是每个字符,这在书写和其他方面更有效。您还可以在此范围内添加小写字符等。

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

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

    return true;
}

您当前的情况总是返回true

您正在应用错误方法来解决您的问题-

  • 您不应该在条件检查之间使用短路或运算符(| |)。它总是返回true。您应该使用&&

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

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

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

    Matcher-Matcher=pattern.Matcher(字符串); 返回matcher.find()

    }

  • // check for invalid chars
    if ((ch != 'A') && (ch != 'C') && ...) {
    
        return true;
    }