从字符数组到字符常量的比较

时间:2016-01-25 19:03:26

标签: java arrays string char logical-operators

我遇到以下代码问题。我的想法是在继续之前检查我的字符串中的无效字符。但不知怎的,我的involvedInvalidChar-方法总是返回true,即使它不应该。 String仅包含四个特定的大写字母。我正在检查是否有其他人参与其中。

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;
}

4 个答案:

答案 0 :(得分:0)

确实

(ch != 'A') || (ch != 'C')总是如此(没有char是A和C)。

||更改为&&

答案 1 :(得分:0)

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码而不是每个字符,这在写作和其他方面更有效。您还可以在此范围内添加小写字符等。

答案 2 :(得分:0)

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

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

    return true;
}

您当前的状况总是如此

答案 3 :(得分:0)

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

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

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

    private static boolean involvingInvalidChars(String string)

    { 模式模式= Pattern.compile(&#34; [ABCD]&#34;);

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

    }