我遇到以下代码问题。我的想法是在继续之前检查我的字符串中的无效字符。但不知怎的,我的involvedInvalidChar-方法总是返回true,即使它不应该。 String仅包含四个特定的大写字母。我正在检查是否有其他人参与其中。
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;
}
答案 0 :(得分:0)
(ch != 'A') || (ch != 'C')
总是如此(没有char
是A和C)。
将||
更改为&&
。
答案 1 :(得分:0)
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码而不是每个字符,这在写作和其他方面更有效。您还可以在此范围内添加小写字符等。
答案 2 :(得分:0)
您应该将无效字符更改为:
// check for invalid chars
if ((ch != 'A') && (ch != 'C') && ...) {
return true;
}
您当前的状况总是如此
答案 3 :(得分:0)
您正在应用一种错误的方法来解决您的问题 -
你不应该在条件检查之间使用短路或操作员(||)。它总是返回true。你应该使用&amp;&amp;
您应该使用正则表达式来解决您的问题
private static boolean involvingInvalidChars(String string)
{ 模式模式= Pattern.compile(&#34; [ABCD]&#34;);
Matcher matcher = pattern.matcher(string); return matcher.find();
}