Проблема несоответствия при изменении регистра символов в Java
У меня есть проблема: я должен прочитать текстовый файл и для набора букв, если они в нижнем регистре, то я должен преобразовать их в верхний регистр.
Ниже приведен код:
for (int i = 0; i < count; i++) {
//outputArray[i] = inputToArray[i];
for (int j = 0; j < charListLength; j++) {
if (inputToArray[i] == charList[j]) {
if (Character.isLowerCase(inputToArray[i])) {
inputToArray[i] = Character.toUpperCase(inputToArray[i]);
}
if (Character.isUpperCase(inputToArray[i])) {
inputToArray[i] = Character.toLowerCase(inputToArray[i]);
}
}
}
}
Входной файл содержит:
a, e, i, o, u строчные Это история A, E, I, O, U UPPERCASE
Но на выходе получается:
a, e, i, o, u, строчные буквы Это история a, e, i, o, u, upPeRCaSe
-
Обратите внимание, что строчные буквы "a, e, i, o, u Это история" и "A, E, I, O, U UPPERCASE" - это отдельные строки во входном файле, и выходной файл также содержит их.
Куда я иду не так, пожалуйста?
Спасибо за вашу большую помощь, поэтому, пожалуйста, помогите.
РЕШИТЬ:
for (int i = 0; i < count; i++) {
//outputArray[i] = inputToArray[i];
for (int j = 0; j < charListLength; j++) {
if (inputToArray[i] == charList[j]) {
if (Character.isLowerCase(inputToArray[i])) {
inputToArray[i] = Character.toUpperCase(inputToArray[i]);
} else if (Character.isUpperCase(inputToArray[i])) {
inputToArray[i] = Character.toLowerCase(inputToArray[i]);
}
break;
}
}
}
Нужен перерыв!
1 ответ
Вы должны заменить свой второй if
-клаузе с else if
,
Учти это:
Ввод a
, Ты первый if
растворяется в true
и делает a
верхний регистр -> A
,
Но тогда ваш второй if
также растворяется в true
так как A
теперь в верхнем регистре, и поэтому он снова преобразуется в нижний регистр -> a
,
Исправлена версия с использованием else if
:
for (int i = 0; i < count; i++) {
//outputArray[i] = inputToArray[i];
for (int j = 0; j < charListLength; j++) {
if (inputToArray[i] == charList[j]) {
if (Character.isLowerCase(inputToArray[i])) {
inputToArray[i] = Character.toUpperCase(inputToArray[i]);
}
else if (Character.isUpperCase(inputToArray[i])) {
inputToArray[i] = Character.toLowerCase(inputToArray[i]);
}
}
}
}