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

Comparing Character from Character-Array to Character constants

我对以下代码有疑问。我的想法是在我继续之前检查我的字符串中的无效字符。但不知何故,我的 involvesInvalidChar- 方法总是 returns 为真,即使它不应该如此。该字符串仅由四个特定的大写字母组成。我正在检查是否还有其他人参与。

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') || ...) {

应该是

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

因为您希望无效字符不是任何个字符,而不仅仅是一个 字符.

2) 有一种更简单的方法,对于大写字母,试试这个:

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

这里我们比较的是ASCII码,而不是单独比较每个字符,这样写效率和其他效率都比较高。您还可以在此范围内添加小写字符等。

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

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

    return true;
}

你目前的状态总是return正确

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

  1. 您不应该在条件 checks.It 之间使用 short-circuit 或运算符 (||) 总是 returning true.You 应该使用 &&

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

    private static boolean involvesInvalidChars (String string)

    { 模式 pattern = Pattern.compile("[ABCD]");

    匹配器匹配器=pattern.matcher(字符串); return matcher.find();

    }