Удалить избыточность при "редактировании" строки

Поскольку строки неизменяемы, я пытаюсь воссоздать их. Мне нужно заменить одну из букв.

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, который для последнего символа.

Другие вопросы по тегам