Elettracompany.com

Компьютерный справочник
5 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Stringbuilder append java

Классы StringBuffer и StringBuilder

Класс String представляет собой неизменяемые последовательности символов постоянной длины и частое использование объектов класса занимают много места в памяти. Класс StringBuffer представляет расширяемые и доступные для изменений последовательности символов, позволяя вставлять символы и подстроки в существующую строку и в любом месте. Данный класс гораздо экономичнее в плане потребления памяти и настоятельно рекомендуется к использованию.

Существует четыре конструктора класса:

  1. StringBuffer() — резервирует место под 16 символов без перераспределения памяти
  2. StringBuffer(int capacity) — явно устанавливает размер буфера
  3. StringBuffer(String string) — устанавливает начальное содержимое и резервирует 16 символов без повторого резервирования
  4. StringBuffer(CharSequence cs) — создаёт объект, содержащий последовательность символов и резервирует место ещё под 16 символов

Методы класса StringBuffer

length()

Метод позволяет получить текущую длину объекта.

capacity()

Метод позволяет получить текущий объём выделенной памяти.

Обратите внимание, что хотя слово состоит из четырёх символов, в памяти выделено запасное пространство для дополнительных 16 символов. Для такой простейшей операции выигрыша нет, но в сложных примерах, когда приходится на лету соединять множество строк, производительность резко возрастает.

ensureCapacity()

Можно предварительно выделить место для определённого количества символов, если собираетесь добавлять большое количество маленьких строк.

setLength(int length)

Устанавливает длину строки. Значение должно быть неотрицательным.

charAt(int index) и setCharAt(int index, char ch)

Можно извлечь значение отдельного символа с помощью метода charAt() и установить новое значение символа с помощью метода setCharAt(), указав индекс символа и его значение.

getChars()

Позволяет скопировать подстроку из объекта класса StringBuffer в массив. Необходимо позаботиться, чтобы массив был достаточного размера для приёма нужного количества символов указанной подстроки.

append()

Метод соединяет представление любого другого типа данных. Есть несколько перегруженных версий.

Строковое представление каждого параметра за кулисами получают через метод String.valueOf() и затем полученные строки склеиваются в итоговую строку.

insert()

Вставляет одну строку в другую. Также можно вставлять значения других типов, которые будут автоматически преобразованы в строки. Вам надо указать индекс позиции, куда будет вставляться строка.

reverse()

Позволяет изменить порядок символов на обратный.

У меня получилось практически то же самое, может метод глючит?

delete() и deleteCharAt()

Метод delete() удаляет последовательность символов, вам надо задать индекс первого символа, который надо удалить, а также индекс символа, следующего за последним из удаляемых. Метод deleteCharAt() удаляет один символ из указанной позиции.

replace()

Позволяет заменить один набор символов на другой. Нужно указать начальный и конечный индекс и строку замены.

substring()

Позволяет получить часть содержимого. Есть две формы метода. В первом случае нужно указать индекс начала позиции, с которой нужно получить подстроку. Во втором варианте указывается начальный индекс и конечный индекс, если нужно получить текст из середины строки.

Есть и другие методы

StringBuilder

Класс StringBuilder идентичен классу StringBuffer и обладает большей производительностью. Однако он не синхронизирован, поэтому его не нужно использовать в тех случаях, когда к изменяемой строке обращаются несколько потоков.

Создадим новый объект.

Добавляем новый фрагмент в существующую строку:

Соединять строки можно цепочкой.

Данный код работает чуть быстрее, чем вызов append() по отдельности. Но это будет заметно при очень больших объёмах.

Класс StringBuilder в Java с примерами

StringBuilder в Java представляет собой изменяемую последовательность символов. Поскольку класс String в Java создает неизменяемую последовательность символов, класс StringBuilder предоставляет альтернативу классу String , поскольку он создает изменяемую последовательность символов. Функция StringBuilder очень похожа на класс StringBuffer , поскольку оба они предоставляют альтернативу классу String , создавая изменяемую последовательность символов. Однако класс StringBuilder отличается от класса StringBuffer на основе синхронизации. Класс StringBuilder не гарантирует синхронизацию, а класс StringBuffer — нет. Поэтому этот класс предназначен для использования в качестве вставной замены для StringBuffer в местах, где StringBuffer использовался одним потоком (как это обычно бывает). Там, где это возможно, рекомендуется использовать этот класс вместо StringBuffer, так как он будет быстрее в большинстве реализаций. Экземпляры StringBuilder небезопасны для использования несколькими потоками. Если такая синхронизация необходима, рекомендуется использовать StringBuffer .

Конструкторы в Java StringBuilder:

  • StringBuilder (): создает построитель строк без символов и начальной емкостью 16 символов.
  • StringBuilder (intacity): создает построитель строк без символов и начальной емкости, указанной аргументом емкости.
  • StringBuilder (CharSequence seq): создает построитель строк, содержащий те же символы, что и указанный CharSequence.
  • StringBuilder (String str): создает построитель строк, инициализированный для содержимого указанной строки.

Ниже приведен пример программы для иллюстрации StringBuilder на Java:

// Java-код для иллюстрации StringBuilder

Читать еще:  System currenttimemillis java

public class GFG1 <

public static void main(String[] argv)

// создаем объект StringBuilder

// конструктор usind StringBuilder ()

// создаем объект StringBuilder

// конструктор usind StringBuilder (CharSequence)

= new StringBuilder( «AAAABBBCCCC» );

// создаем объект StringBuilder

// конструктор usind StringBuilder (емкость)

= new StringBuilder( 10 );

System.out.println( «String2 capacity = «

// создаем объект StringBuilder

// конструктор usind StringBuilder (String)

Методы в Java StringBuilder:

  1. StringBuilder append (X x) : этот метод добавляет строковое представление аргумента типа X в последовательность.
  2. StringBuilder appendCodePoint (int codePoint) : этот метод добавляет строковое представление аргумента codePoint к этой последовательности.
  3. intacity () : этот метод возвращает текущую емкость.
  4. char charAt (int index) : этот метод возвращает значение char в этой последовательности по указанному индексу.
  5. IntStream chars () : этот метод возвращает поток значений int, расширяющих ноль, из этой последовательности.
  6. int codePointAt (int index) : этот метод возвращает символ (кодовая точка Unicode) по указанному индексу.
  7. int codePointBefore (int index) : этот метод возвращает символ (кодовая точка Unicode) перед указанным индексом.
  8. int codePointCount (int beginIndex, int endIndex) : Этот метод возвращает количество кодовых точек Unicode в указанном текстовом диапазоне этой последовательности.
  9. IntStream codePoints () : этот метод возвращает поток значений кодовой точки из этой последовательности.
  10. StringBuilder delete (int start, int end) : этот метод удаляет символы в подстроке этой последовательности.
  11. StringBuilder deleteCharAt (int index) : этот метод удаляет символ в указанной позиции в этой последовательности.
  12. void sureCapacity (intimumCapacity) : Этот метод гарантирует, что емкость по крайней мере равна указанному минимуму.
  13. void getChars (int srcBegin, int srcEnd, char [] dst, int dstBegin) : символы этого метода копируются из этой последовательности в массив символов назначения dst.
  14. int indexOf () : Этот метод возвращает индекс в этой строке первого вхождения указанной подстроки.
  15. StringBuilder insert (int offset, boolean b) : этот метод вставляет строковое представление аргумента booalternatelean в эту последовательность.
  16. StringBuilder insert () : этот метод вставляет строковое представление аргумента char в эту последовательность.
  17. int lastIndexOf () : Этот метод возвращает индекс в этой строке последнего вхождения указанной подстроки.
  18. int length () : этот метод возвращает длину (количество символов).
  19. int offsetByCodePoints (int index, int codePointOffset) : этот метод возвращает индекс в этой последовательности, который смещен от данного индекса на кодовые точки codePointOffset.
  20. StringBuilder replace (int start, int end, String str) : этот метод заменяет символы в подстроке этой последовательности на символы в указанной строке.
  21. StringBuilder reverse () : Этот метод вызывает замену этой последовательности символов на обратную.
  22. void setCharAt (int index, char ch) : в этом методе символ по указанному индексу устанавливается в ch.
  23. void setLength (int newLength) : Этот метод устанавливает длину последовательности символов.
  24. CharSequence subSequence (int start, int end) : Этот метод возвращает новую последовательность символов, которая является подпоследовательностью этой последовательности.
  25. String substring () : этот метод возвращает новую строку, содержащую подпоследовательность символов, которая в настоящее время содержится в этой последовательности символов.
  26. String toString () : этот метод возвращает строку, представляющую данные в этой последовательности.
  27. void trimToSize () : этот метод пытается уменьшить объем памяти, используемой для последовательности символов.

// Java-код для иллюстрации
// методы StringBuilder

Java StringBuilder

Java StringBuilder tutorial shows how to use StringBuilder in Java. Java String objects are immutable; it is only possible to create mofied copies of the original string. When we need to modify strings in-place, we use StringBuilder .

StringBuilder

StringBuilder is a mutable sequence of characters. StringBuilder is used when we want to modify Java strings in-place. StringBuffer is a thread-safe equivalent similar of StringBuilder .

StringBuilder has methods such as append() , insert() , or replace() that allow to modify strings.

Java StringBuilder constructors

StringBuilder has four constructors:

Java StringBuilder is mutable

Java String is immutable while StringBuilder is mutable.

The example demonstrates the main difference between String and StringBuilder .

Java String has a replace() method but it does not modify the original string. It creates a modifed copy instead.

On the other hand, StringBuilder replaces the string in-place.

This is the output.

Java StringBuilder append method

StringBuilder contains several overload append() methods that add a value at the end of the string.

The example builds one big string from hundreds of small strings. The string has the following form: 1 + 2 + 3 + . + MAX_VAL = SUM.

An empty StringBuilder is created.

A range of values 1..MAX_VAL is created. We iterate over these values with the forEach() method.

We append the current value to the string builder with the append() method.

Читать еще:  Ошибка не удалось обнаружить устройство direct3d

In order for the output to fit the screen, we add a newline character after each ten values.

Between the values, we add either the «+» or the «=» characters.

At the end of the string, we add the sum of values.

Finally, the string is printed to the console.

Java StringBuilder insert method

The insert() method is used to insert a string into the specified position of the builder.

The example inserts a string into a sentence with the insert() method.

We have created this sentence.

Getting indexes of substrings

The indexOf() method returns the first occurrence of a substring while the lastIndexOf() method returns the last occurrence.

The example uses the indexOf() and lastIndexOf() methods to get the indexes of the «wolf» substring.

We create a string builder with the append() method.

We get the first occurrence of the «wolf» term from the builder.

We get the first occurrence of the «wolf» term from the builder, starting from the index 15.

Similarly, we get the last occurrences of the «wolf» substring.

This is the output.

StringBuilder replace method

The replace() method replaces a substring in the string builder with the specified new string.

The example replaces the «fox» substring with the «dog» string.

We find the beginning index of the substring to be replaced.

In our operation, we need to know the length of the substring.

We call the replace() method. The first parameter is the starting index, the second is the ending index of the substring to be removed. The third parameter is the new string.

Java StringBuilder delete characters

There are two methods for deleting characters in a string builder.

The example deletes a few characters from a string.

With the delete() method, we delete a substring specified by the indexes.

With the delete() method we delete one character; in our case it is a redundant space character.

This is the output.

Java StringBuilder substrings

With the substring() method it is possible to return substrings from a string.

In the example, we retrieve two substrings.

This line retrives a substring with a starting index 15 and ending index 18.

Here we retrie a substring from index 15 until the end of the sentence.

This is the output.

In this tutorial, we have worked with Java StringBuilder. List all Java tutorials.

ez code

Просто о сложном.

Управление строками, функции для работы со строками в Java. Часть 2

Продолжаем изучение строк в Java. Основы работы со строками можно посмотреть в уроке «Строки в Java».

Методы для сравнения строк

Класс String содержит методы для сравнения строк и частей строк. Следующая таблица описывает эти методы:

StringBuilder необходимо использовать в случаях, когда это поможет упростить код (пример ниже) или если это необходимо для лучшей производительности. Если вам необходимо объединить большое количество строк, использование StringBuilder будет более эффективным.

Length и Capacity

Класс StringBuilder как и класс String , имеет метод length(), который возвращает длину последовательности символов объекта.

В отличие от строк, в StringBuilder, помимо длины есть capacity — количество символов под которое выделена память. Емкость (capacity), возвращаемая методом capacity() , всегда больше или равна длине строки (обычно больше) и автоматически будет увеличина при необходимости.

Например, следующий код:

создаст string builder длиной 9 символов и емкостью 16:

StringBuilder Java

Класс StringBuilder содержит несколько методов относящихся к длине и емкости, которых нет в классе String :

Некоторые операции (например, append() , insert() , или setLength() ) могут увеличить длину последовательности символов в stringbuilder’е , так что длина может оказаться больше текущей емкости. Когда это происходит — емкость автоматически увеличивается.

Функции StringBuilder

Основные функции StringBuilder , которых нет в String : append() и insert() , которые перегружены для приема разного типа данных. Каждый конвертирует аргумент в строку и добавляет её в строку stringbuilder’а. Метод append всегда добавляет символы в конец существующей последовательности, тогда как метод insert добавляет символы в указанное место.

Некоторые методы класса StringBuilder .

Вы можете использовать любой метод класса String на объекте класса StringBuilder предварительно сконвертировав его в строку методом toString() . Затем из строки можно опять сделать stringbuilder, используя конструктор: StringBuilder(String str) .

Пример

Программа StringDemo, которую мы рассматривали в предыдущих уроках Java — пример того, когда использование StringBuilder вместо String делает программу проще.

Читать еще:  New objava добавление объявления да

StringDemo переворачивает палиндром:

Для того чтобы перевернуть сроку программа сначала конвертирует строку в массив символов (первый цикл), далее переворачивает массив и обратно конвертирует массив в строку.

Если вы конвертируете строку palindrome в stringbuilder, вы сможете использовать метод reverse() класса StringBuilder . Код станет чище и проще читаемым:

Обратите внимание, что в функцию println() мы передаем StringBuilder:

Как очистить или удалить StringBuilder?

431 Hans Olsson [2011-03-04 13:26:00]

Я использую StringBuilder в цикле, и каждые x итераций я хочу его очистить и начать с пустого StringBuilder , но я не вижу в документах каких-либо методов, похожих на .Net StringBuilder.Clear, только delete, который кажется слишком сложным.
Итак, каков наилучший способ очистки StringBuilder в Java?

9 ответов

475 Решение Marcus Frödin [2011-03-04 13:29:00]

Изменить Обновлено, чтобы добавить отзыв.

Так работают два способа:

  • Используйте stringBuilderObj.setLength(0) .
  • Выделите новый с помощью new StringBuilder() вместо очистки буфера

В основном есть две альтернативы, используя setLength(0) to reset StringBuilder или создавая новую на каждой итерации. Оба могут иметь плюсы и минусы в зависимости от использования.

Если вы заранее знаете ожидаемую пропускную способность StringBuilder, каждый раз создание нового должно быть таким же быстрым, как установка новой длины. Это также поможет сборщику мусора, поскольку каждый StringBuilder будет относительно недолговечным, и gc оптимизирован для этого.

Если вы не знаете емкость, повторное использование того же StringBuilder может быть быстрее. Каждый раз, когда вы превышаете емкость при добавлении, должен быть выделен новый массив поддержки, а предыдущий контент должен быть скопирован. Повторно используя тот же StringBuilder, он достигнет необходимой емкости после некоторых итераций и после этого не будет никакого копирования.

64 krtek [2011-03-04 13:30:00]

delete не слишком сложна:

Вы также можете сделать:

22 Javamann [2011-09-20 19:42:00]

Если вы посмотрите на исходный код для StringBuilder или StringBuffer, вызов setLength() просто сбрасывает значение индекса для массива символов. ИМХО с использованием метода setLength всегда будет быстрее нового распределения. Они должны были бы назвать метод «clear» или «reset», чтобы он был более ясным.

Я проголосую за sb.setLength(0); не только потому, что это один вызов функции, но , потому что он фактически не копирует массив в другой массив, как sb.delete(0, builder.length()); , он просто заполняет оставшиеся символы 0 и установите для переменной длины новую длину.

Вы можете взглянуть на их реализацию, чтобы подтвердить мою точку от здесь в функции setLength и delete0 .

3 Tony Meng [2012-11-16 01:57:00]

вы должны использовать sb.delete(0, sb.length()) или sb.setLength(0) и НЕ создать новый StringBuilder().

2 Thomas [2014-03-27 20:25:00]

Я думаю, что многие из ответов здесь могут отсутствовать в качестве метода качества, включенного в StringBuilder : .delete(int start, [int] end) . Я знаю, что это поздний ответ; однако это должно быть сообщено (и объяснено немного более подробно).

Скажем, у вас есть таблица StringBuilder, которую вы хотите динамически изменять в своей программе (я сейчас работаю над этим), например.

Если вы перебираете метод и изменяете контент, используйте контент, а затем хотите отбросить содержимое для «очистки» StringBuilder для следующей итерации, вы можете удалить его содержимое, например.

начало и конец — индексы символов, которые вы хотите удалить. Не знаете длину в символах и хотите удалить все это?

СЕЙЧАС, для кикера. StringBuilders , как упоминалось ранее, накладывает много накладных расходов при частом изменении (и может вызвать проблемы с безопасностью в отношении потоков); поэтому используйте StringBuffer — то же, что и StringBuilder (за несколькими исключениями) — если ваш StringBuilder используется для взаимодействия с пользователем.

Если производительность является главной проблемой. ирония (imo) — это конструкции java для форматирования текста, поступающего в буфер, будет намного больше времени на процессор, чем сборка alloc/realloc/garbage. ну, возможно, не GC в зависимости от того, сколько строителей вы создаете и отбрасываете.

Но просто добавление составной строки ( «Hello World of + 6E9 +» earthlings. «) в буфер, скорее всего, сделает всю проблему несущественной.

И, действительно, если StringBuilder участвует в содержании, это сложный и длительный и длинный, чем простой String str = «Привет»; (nevermind java, вероятно, все равно использует построитель в фоновом режиме)

Лично я стараюсь не злоупотреблять GC. Так что если это будет что-то, что будет использоваться в сценарии быстрого пожара — например, написав выходные сообщения отладки. Я просто предполагаю, что объявляю его в другом месте и обнуляю его для повторного использования.

Ссылка на основную публикацию
ВсеИнструменты 220 Вольт
Adblock
detector
×
×