Удалить избыточность при "редактировании" строки
Поскольку строки неизменяемы, я пытаюсь воссоздать их. Мне нужно заменить одну из букв.
for (int i = 0; i < mat.length(); i++){
//there's more stuff here, but that'd require a lot more explaining
//the following don't occur at every iteration
//mat and s are always the same length though
if (i == s.length())
mat = mat.substring(0, i) + s.charAt(i);
else
mat = mat.substring(0, i) + s.charAt(i) + mat.substring(i + 1, mat.length());
}
В основном, изменив букву String mat с буквой String s в том же индексе. Проблема в том, что если это последний индекс, я получаю ошибку "вне границ", поэтому я решил использовать if / else, чтобы позаботиться об этом.
Но есть избыточность в том, что оба условия запускают код:
mat = mat.substring(0, i) + s.charAt(i)
Какой лучший способ удалить эту избыточность? Спасибо!
4 ответа
Вы хотите что-то вроде этого (рефакторинг)?
String optional = "";
if ((i != s.length()))
optional= mat.substring(i + 1, mat.length());
mat = mat.substring(0, i) + s.charAt(i) + optional
;
pat = pat.substring(0, i) + s.charAt(i) + pat.substring(i + 1, pat.length());
само по себе работает........ Я не совсем уверен, почему..... Если изменение должно произойти в первой букве строки, первое предложение просто "", аналогично, если это последнее буква...... не должно ли быть исключение за границей с i+1?
обновление: только что сделал быструю чистую программу, поскольку оказывается, что включающий индекс метода подстроки не возвращает выход за пределы, если он только на 1 после последнего индекса.
Пример:
man ="what";
System.out.println(man.substring(4, 4));
работает просто отлично и ничего не выводит. Консоль даже не появляется при затмении, если вы используете только.print
Если i=s.length()
чем будет последний индекс i-1
;
if (i == s.length())
mat = mat.substring(0, i) + s.charAt(i-1);// Use i-1 instead of i.
else
mat = mat.substring(0, i) + s.charAt(i) + mat.substring(i + 1, mat.length());
Если значение i равно длине строки s.
В вашем коде s.charAt(i) находится вне диапазона массива. Максимальный индекс для использования должен быть i-1, который для последнего символа.