有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将字符检查“包含AZ”转换为“不包含AZ”

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

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

如何更改代码,使其功能为检查name.charAt(i)是否不等于AZaz


共 (4) 个答案

  1. # 1 楼答案

        String str = "1234";
        if(!str.matches("[a-zA-Z]+")){
            System.out.println("not contains alphabets");
        }else{
            System.out.println("contains alphabets");
        }
    
  2. # 2 楼答案

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

    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)
    

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

    \neg(P\lor Q)\iff(\neg P)\land(\neg Q)

    得到

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

    然后申请

    \neg(P\land Q)\iff(\neg P)\lor(\neg Q)

    对于内部表达式:

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

    现在将原始表达式替换回,将<=求反为>,将>=求反为<

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

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

  3. # 3 楼答案

    而不是比较大写字母和大写字母;小写,使用字符。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;
                        }
        }
    
  4. # 4 楼答案

    只要否定你的条件:

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