1

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

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

如何更改代码以使其用作检查name.charAt(i)“是否不等于或A到” ?Zaz

4

4 回答 4

3

只是否定你的条件:

if (!((name.charAt(i) >= 'a' && name.charAt(i) <= 'z') || ((name.charAt(i) >= 'A' && name.charAt(i) <= 'Z'))))
于 2015-03-17T09:38:10.853 回答
1
    String str = "1234";
    if(!str.matches("[a-zA-Z]+")){
        System.out.println("not contains alphabets");
    }else{
        System.out.println("contains alphabets");
    }
于 2015-03-17T09:44:31.607 回答
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')

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

于 2015-03-17T10:02:06.613 回答
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;
                    }
    }
于 2015-03-17T10:25:03.640 回答