Рубрики
Без рубрики

Добавление персонажа в строку в данной позиции

Узнайте, как изменить строку, вставив новый символ в произвольное положение.

Автор оригинала: baeldung.

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. Использование метода подступирования

Более простой и более высокий подход заключается в использовании субструинг () метод Струнные класс. Он готовит Струнные путем конкатенатирования:

  1. Подразряд оригинального Струнные до позиции
  2. Новый персонаж
  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 .