将charAt检查'包含A-Z'转换为'不包含A-Z'

时间:2015-03-17 09:36:54

标签: java netbeans compare charat

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

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

如果name.charAt(i)&#34;不等于AZa到{{1>,我如何更改代码以便检查代码? }}?

4 个答案:

答案 0 :(得分:3)

只是否定你的情况:

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我将展示一种系统的方法,可以帮助你在其他类似的情况下。首先,为了提高可读性,将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)

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

\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 :(得分:0)

而不是比较上层和下层的字符。小写,使用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;
                    }
    }