【问题标题】:Converting charAt check 'containing A-Z' to 'not containing A-Z'将 charAt 检查“包含 A-Z”转换为“不包含 A-Z”
【发布时间】:2015-03-17 09:36:53
【问题描述】:

我想检查字符串输入是否包含字母以外的字符。以下是我当前的代码:

if ((name.charAt(i) >= 'a' && name.charAt(i) <= 'z') ||
 ((name.charAt(i) >= 'A' && name.charAt(i) <= 'Z')))

我怎样才能更改代码,以便检查name.charAt(i) 是否不等于AZaz

【问题讨论】:

    标签: java netbeans compare charat


    【解决方案1】:

    只是否定你的条件:

    if (!((name.charAt(i) >= 'a' && name.charAt(i) <= 'z') || ((name.charAt(i) >= 'A' && name.charAt(i) <= 'Z'))))
    

    【讨论】:

      【解决方案2】:
          String str = "1234";
          if(!str.matches("[a-zA-Z]+")){
              System.out.println("not contains alphabets");
          }else{
              System.out.println("contains alphabets");
          }
      

      【讨论】:

        【解决方案3】:

        我将展示一个系统化的方法,它可以在其他类似情况下为您提供帮助。首先,为了提高可读性,将 char 提取到本地 var。

        char ch = name.charAt(i);
        if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z') ...
        

        现在您可以根据德摩根定律来处理这个问题。为了方便起见,我将为每个部分声明一些辅助布尔变量:

        boolean a = ch >= 'a', 
                z = ch <= 'z', 
                A = ch >= 'A', 
                Z = ch <= 'Z';
        

        所以,我们有你原来的表达方式

        (a && z) || (A && Z)
        

        我们想要那个表达式的否定:

        !(a && z || A && Z)
        

        让我们把它清理干净。申请

        得到

         !(a && z) && !(A && Z)
        

        然后申请

        到内部表达式:

        (!a || !z) && (!A || !Z)
        

        现在将原始表达式替换回去,将 &lt;= 否定为 &gt;,将&gt;= 否定为 &lt;

        (ch < 'a' || ch > 'z') && (ch < 'A' || ch > 'Z')
        

        这是您正在寻找的否定表达式,已清除任何显式否定。

        【讨论】:

        • 谢谢@Marko。你的帖子很有帮助:)
        【解决方案4】:

        不要比较大小写字符,而是使用 Character.isLetter(char c) 方法来检查这两种情况。

            char[] chars = name.toCharArray();
                 boolean isAlphabet = true;
                for (char c : chars) {
                   if (!Character.isLetter(c)) {
                       //if character is not A-Z or a-z
                        isAlphabet = false;
                            }
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-11-22
          • 1970-01-01
          • 2018-03-16
          • 1970-01-01
          • 1970-01-01
          • 2012-08-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多