Я пытаюсь написать программу, которая меняет регистр двух символов в строке (меняет верхний регистр на нижний и наоборот). Она скомпилирована, но строка та же.
String newChar1 = caseChanger("DcoderIsCool", 3);
String newChar2 = caseChanger("DcoderIsCool", 8);
Я думаю, проблема в методе, который я использовал:
public static String caseChanger (String s, int ind) {
if (!(Character.isUpperCase(s.charAt(ind)))) {
//checking if the character is uppercase or lowercase
return s.substring(ind, ind + 1).toLowerCase();
} else {
return s.substring(ind, ind + 1).toUpperCase();
}
}
Вывод должен был быть "DcoDerIscool", но это "DcoderIsCool" (исходная строка).
Кроме того, если предположить, что под «ошибками» вы подразумеваете «ошибки компилятора», «ошибок нет» — это довольно низкая планка для очистки. Также нужно проверить наличие логической ошибки, о которой компилятор не может знать.
Проверьте свое условие: если символ нет в верхнем регистре, вы конвертируете его в нижний регистр. Это не кажется правильным...
if (!uppercase) вернуть нижний регистр?
Ваше условие неверно: удалите из него not !.
да, извините, я имел в виду ошибки компилятора. Спасибо
это работает сейчас. спасибо всем вам! я не был уверен, что! имел в виду, я скопировал это из ответа на вопрос
Как правило, не используйте код, который вы не понимаете. Это всего лишь один из способов, который может пойти не так. Но могло быть и намного хуже. Кроме того, прочитайте базовый учебник по Java. И удачи в обучении :)
Да, ты прав. Спасибо! я все еще изучаю основы :)




Я думаю, это то, что вы ищете
public static String caseChanger (String s, int ind) {
if ((Character.isUpperCase(s.charAt(ind)))) { //checking if the character is uppercase or lowercase
return new StringBuilder(s).replace(ind,ind+1,s.substring(ind, ind + 1).toLowerCase()).toString();
}
else {
return new StringBuilder(s).replace(ind,ind+1,s.substring(ind, ind + 1).toUpperCase()).toString(); }
}
Таким образом, вы меняете только n символов и возвращаете эти измененные символы рядом с дополнительным not ! вы добавляете, что ваше условие if наоборот. Но то, что вы ищете, - это заменить символы в нужной позиции в исходной строке. если я не ошибаюсь. Надеюсь, поможет
Спасибо! как было предложено, я удалил "!" и теперь это работает, но ваш код более прямолинейный, поэтому я также изменю операторы возврата :)
Используйте StringBuilder, а не StringBuffer. StringBuffer вызывает накладные расходы на синхронизацию для каждого метода, что бесполезно в однопоточной логике и редко приносит пользу даже в многопоточной логике.
Надеюсь, я правильно понял ваш вопрос.
приведенный ниже код даст вам вывод DcoDerIsCool и DcoderIscool.
public static String caseChanger(String s, int ind) {
char[] charArr = s.toCharArray();
if (!(Character.isUpperCase(s.charAt(ind)))) {
charArr[ind] = Character.toUpperCase(s.charAt(ind));
} else {
charArr[ind] = Character.toLowerCase(s.charAt(ind));
}
return String.valueOf(charArr);
}
Вы извлекли символ из строки, но не поместили его обратно в строку s.substring(ind, ind + 1).toLowerCase() применяется к одному символу
Вместо этого return s.substring(ind, ind + 1).toLowerCase();
Замените символ CaseChanged обратно в исходную строку.
Где часть кода, где вы вызываете функцию?