【问题标题】:Comparing Character from Character-Array to Character constants将字符数组中的字符与字符常量进行比较
【发布时间】:2016-01-25 19:03:26
【问题描述】:

我对以下代码有疑问。我的想法是在我继续之前检查我的字符串中的无效字符。但不知何故,我的涉及InvalidChar- 方法总是返回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;
}

【问题讨论】:

    标签: java arrays string char logical-operators


    【解决方案1】:

    (ch != 'A') || (ch != 'C') 确实总是正确的(没有 char 是 A 和 C)。

    || 更改为&&

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        你当前的条件总是返回 true

        【讨论】:

          【解决方案4】:

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

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

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

            私有静态布尔值涉及InvalidChars(字符串字符串)

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

            Matcher matcher = pattern.matcher(string); 返回 matcher.find();

            }

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-10-17
            • 1970-01-01
            • 1970-01-01
            • 2013-08-04
            • 2012-08-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多