【问题标题】:Comparing Character from Character-Array to Character constants将字符数组中的字符与字符常量进行比较
【发布时间】:2016-01-25 19:03:26
【问题描述】:
我对以下代码有疑问。我的想法是在我继续之前检查我的字符串中的无效字符。但不知何故,我的涉及InvalidChar- 方法总是返回true,即使它不应该。字符串仅包含四个特定的大写字母。我正在检查是否有其他人参与。
public static int method (String someString) {
// array of characters from String
char[] charArray = someString.toCharArray();
// are there invalid characters in the Array?
if (involvesInvalidChars(charArray)) {
return -1;
}
... // code following
}
private static boolean involvesInvalidChars (char[] charArray) {
// for each char in the array
for (char ch : arrayOfChars) {
// check for invalid chars
if ((ch != 'A') || (ch != 'C') || ...) {
return true;
}
}
return false;
}
【问题讨论】:
标签:
java
arrays
string
char
logical-operators
【解决方案1】:
(ch != 'A') || (ch != 'C') 确实总是正确的(没有 char 是 A 和 C)。
将|| 更改为&&。
【解决方案2】:
1)
if ((ch != 'A') || (ch != 'C') || ...) {
应该是
if ((ch != 'A') && (ch != 'C') && ...) {
因为您希望无效字符不是是任何个字符,而不仅仅是一个字符。
2) 有一种更简单的方法可以做到这一点,对于大写字母,试试这个:
for(char ch: arrayOfChars)
if((int)ch < 65 || (int) ch > 90)
return false;
这里我们比较的是 ASCII 码,而不是单独比较每个字符,这样在书写和其他方面效率更高。您还可以在此范围内添加小写字符等。
【解决方案3】:
您应该将无效字符检查更改为:
// check for invalid chars
if ((ch != 'A') && (ch != 'C') && ...) {
return true;
}
你当前的条件总是返回 true
【解决方案4】:
您正在使用一种错误的方法来解决您的问题 -
您不应在条件检查之间使用短路或运算符 (||)。它始终返回 true。您应该使用 &&
-
你应该使用正则表达式来解决你的问题
私有静态布尔值涉及InvalidChars(字符串字符串)
{
模式pattern = Pattern.compile("[ABCD]");
Matcher matcher = pattern.matcher(string);
返回 matcher.find();
}