1. Введение
В этом быстром учебнике, мы продемонстрировать, как добавить символ в любой позиции в Струнные в Java .
Мы представляем три реализации простой функции, которая принимает первоначальный Струна, характер и положение, где мы должны добавить его.
Так как класс String окончательный и непреложный функция должна вернуть новую Струнные с добавленный символ.
2. Использование массива символов
Здесь идея заключается в создании нового массива символов и копировании символов из оригинального Струнные перед данной позицией.
После этого мы ставим нового персонажа в положение и копируют остальных персонажей из оригинального Струнные в последующих положениях нового массива.
Наконец, мы строим желаемую Струнные из этого массива.
public String addChar(String str, char ch, int position) { int len = str.length(); char[] updatedArr = new char[len + 1]; str.getChars(0, position, updatedArr, 0); updatedArr[position] = ch; str.getChars(position, len, updatedArr, position + 1); return new String(updatedArr); }
По сравнению с двумя другими методами, это низкоуровневый подход к проектированию и дает нам большую гибкость.
3. Использование метода подступирования
Более простой и более высокий подход заключается в использовании субструинг () метод Струнные класс. Он готовит Струнные путем конкатенатирования:
- Подразряд оригинального Струнные до позиции
- Новый персонаж
- Подразряд оригинального Струнные после позиции
public String addChar(String str, char ch, int position) { return str.substring(0, position) + ch + str.substring(position); }
Хотя вышеуказанный код более читаем, он имеет недостаток в том, что он создает ряд временных объектов для определения результата. Как Струнные это непреложный класс, каждый звонок в его субструинг () метод создает новую Струнные пример.
Наконец, когда мы сокатицировать части, компилятор создает Стрингбилдер объект для их приложения один за другим. Каждый Струнные и Стрингбилдер объект выделяет отдельные местоположения памяти для своего внутреннего массива символов.
Эта реализация также должна копировать все символы трижды из одного массива в другой.
Если нам нужно вызвать метод огромное количество раз, временные объекты могут заполнить память кучи, и это вызовет GC очень часто. Это также может повлиять на производительность в некоторой степени.
4. Использование StringBuilder
Стрингбилдер является классом утилиты, предоставляемым Java библиотека для построения и манипулирования Струнные объектов по-разному.
Мы можем реализовать ту же функциональность с помощью вставить () метод Стрингбилдер класс:
public String addChar(String str, char ch, int position) { StringBuilder sb = new StringBuilder(str); sb.insert(position, ch); return sb.toString(); }
Вышеупомянутый код должен создать только одну Стрингбилдер объект для вставки символа в положение. Он выделяет такое же количество памяти, что и Струнные имеет, но для создания места для нового персонажа основной массив сдвиги следующих символов на 1 позицию.
Хотя с помощью Стрингбилдер может быть медленнее, он не имеет памяти бремя инициализации временных объектов. Мы также в конечном итоге с кодом, который прост и читается.
5. Заключение
В этой статье мы сосредоточились на нескольких способах добавления символа в Струнные объект в Java . Мы видели, что реализация с использованием массива символов обеспечивает лучшую производительность и что с субструинг метод дает более читаемый подход.
Предпочтительным способом реализации решения является использование Стрингбилдер класс – так как он прост, менее подвержен ошибкам и обеспечивает хорошую и стабильную производительность .
Как обычно, полный исходный код для вышеупомянутого учебника доступен более на GitHub .