2013-11-11 3 views
1

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

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()); 
} 

В основном изменение буквы строкового мата с буквой строки s с тем же индексом. Проблема в том, что это последний индекс, я бы получил ошибку за пределами, поэтому я решил использовать if/else, чтобы позаботиться об этом.

Но есть избыточность в том, что оба условия запуска кода:

mat = mat.substring(0, i) + s.charAt(i) 

Какой самый лучший способ, чтобы удалить эту избыточность? Спасибо!

+1

Вы увеличиваете i? Также было бы полезно, если бы вы использовали ** StringBuilder **, вместо этого вы создаете слишком много строк. –

+0

'if (i == s.length())', тогда вы закончили - вы уже повторили все символы строки. –

+0

Я не думаю, что могу использовать StringBuilder, хаха, это для школы. И Мэтт, но мне, возможно, понадобится изменить последнего персонажа? – House3272

ответ

1

Вы хотите что-то вроде этого (рефакторинг)?

String optional = ""; 
if ((i != s.length())) 
    optional= mat.substring(i + 1, mat.length()); 

mat = mat.substring(0, i) + s.charAt(i) + optional 

;

+0

Ха-ха Я пробовал это, не работает, так как ваше первоначальное переопределение мата эффективно отсекает конец. – House3272

+0

@ House3272 исправлено. :) – alfasin

+0

Ах да, я пытался избежать использования другой строки, это тот же самый код. Но ваше решение отличается ... hmmm interesting ..... gimme a second – House3272

0

Если 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()); 
0

Если значение i равно длине строки s.

В вашем коде s.charAt (i) находится вне диапазона массивов. Максимальный индекс для использования должен быть i-1, который предназначен для последнего символа.

0
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

 Смежные вопросы

  • Нет связанных вопросов^_^