В поисках лучшей практики Java для решения следующей проблемы.
У меня есть (относительно) длинная строка и набор (неперекрывающихся) изменений, чтобы сделать это - допустим, что изменения имеют подпись:
change(int startIndex, int endIndex, String replacement);
и примером будет
assert doChange("aaa",new Change(1,2,"hello")).equals("aHelloa");
Мой план состоит в том, чтобы работать назад (так что меняются индексы), хотя строка разбивается на три точки каждый раз и затем сшивается в замене. Но я могу себе представить, что это имеет гораздо более эффективный /java-подобный подход... есть ли API-вызов, который я пропустил?
Стандартная строка Java неизменна, что делает ее непригодной для расширенных операций на основе строк. Но есть также классы StringBuffer и StringBuilder, которые представляют собой изменяемую строку, предназначенную для манипулирования. У них даже есть собственный метод replace(start, end, str)
который делает именно то, что вы пытаетесь сделать.
Основное различие между этими двумя классами заключается в том, что StringBuffer является потокобезопасным, а StringBuilder - нет. Если у вас нет нескольких потоков, обращающихся к одной и той же строке, используйте StringBuilder, потому что он обычно работает быстрее.