我想检查String输入是否包含字母以外的字符。以下是我目前的代码:
if ((name.charAt(i) >= 'a' && name.charAt(i) <= 'z') ||
((name.charAt(i) >= 'A' && name.charAt(i) <= 'Z')))
如果name.charAt(i)
&#34;不等于A
到Z
或a
到{{1>,我如何更改代码以便检查代码? }}?
答案 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)
让我们把它清理干净。申请
获取
!(a && z) && !(A && Z)
然后申请
到内部表达式:
(!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;
}
}