Stringbuilder sb new stringbuilder

Stringbuilder sb new 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() по отдельности. Но это будет заметно при очень больших объёмах.

Хотя класс System.String предоставляет нам широкую функциональность по работе со строками, все таки он имеет свои недостатки. Прежде всего, объект String представляет собой неизменяемую строку. Когда мы выполняем какой-нибудь метод класса String, система создает новый объект в памяти с выделением ему достаточного места. Удаление первого символа — не самая затратная операция. Однако когда подобных операций множество, а объем текста, для которого надо выполнить данные операции, также не самый маленький, то издержки при потере производительности становятся более существенными.

Чтобы выйти из этой ситуации во фреймворк .NET был добавлен новый класс StringBuilder , который находится в пространстве имен System.Text . Этот класс представляет динамическую строку.

При создании строки StringBuilder выделяет памяти больше, чем необходимо этой строке:

Теперь переменная sb представляет начальную строку "Привет мир". Эта строка имеет длину в 10 символов. Для хранения длины в классе StringBuilder есть свойство Length. Однако есть и вторая величина — емкость выделенной памяти. Это значение хранится в свойстве Capacity . Емкость — это выделенная память под объект. Хотя в данном случае длина равна 10 символов, но реально емкость будет составлять по умолчанию 16 символов.

Класс StringBuilder имеет еще ряд конструкторов, которые позволяют разными способами выполнить начальную инициализацию объекта. Так, мы можем задать пустой объект, но установить начальную емкость:

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

Теперь посмотрим на примере использование и преимущества класса StringBuilder:

При создании объекта StringBuilder выделяется память по умолчанию для 16 символов, так как длина начальной строки меньше 16.

Дальше применяется метод Append — этот метод добавляет к строке подстроку. Так как при объединении строк их общая длина — 22 символа — превышает начальную емкость в 16 символов, то начальная емкость удваивается — до 32 символов.

Если бы итоговая длина строки была бы больше 32 символов, то емкость расширялась бы до размера длины строки.

Далее опять применяется метод Append, однако финальная длина уже будет 28 символов, что меньше 32 символов, и дополнительная память не будет выделяться.

Кроме метода Append класс StringBuilder предлагает еще ряд методов для операций над строками:

Insert : вставляет подстроку в объект StringBuilder, начиная с определенного индекса

Remove : удаляет определенное количество символов, начиная с определенного индекса

Replace : заменяет все вхождения определенного символа или подстроки на другой символ или подстроку

AppendFormat : добавляет подстроку в конец объекта StringBuilder

Используем методы StringBuilder:

Когда надо использовать класс String, а когда StringBulder?

Microsoft рекомендует использовать класс String в следующих случаях:

Читайте также:  Смазка для ноутбука от перегрева

При небольшом количестве операций и изменений над строками

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

Когда надо выполнять масштабные операции поиска при построении строки, например IndexOf или StartsWith. Класс StringBuilder не имеет подобных методов.

Класс StringBuilder рекомендуется использовать в следующих случаях:

При неизвестном количестве операций и изменений над строками во время выполнения программы

Когда предполагается, что приложению придется сделать множество подобных операций

The principal operations on a StringBuilder are the append and insert methods, which are overloaded so as to accept data of any type. Each effectively converts a given datum to a string and then appends or inserts the characters of that string to the string builder. The append method always adds these characters at the end of the builder; the insert method adds the characters at a specified point.

For example, if z refers to a string builder object whose current contents are " start ", then the method call z.append("le") would cause the string builder to contain " startle ", whereas z.insert(4, "le") would alter the string builder to contain " starlet ".

In general, if sb refers to an instance of a StringBuilder , then sb.append(x) has the same effect as sb.insert(sb.length(), x) . Every string builder has a capacity. As long as the length of the character sequence contained in the string builder does not exceed the capacity, it is not necessary to allocate a new internal buffer. If the internal buffer overflows, it is automatically made larger.

Instances of StringBuilder are not safe for use by multiple threads. If such synchronization is required then it is recommended that StringBuffer be used.

Constructor Summary

Constructors

Constructor and Description
StringBuilder()
StringBuilder(CharSequence seq) StringBuilder(int capacity) StringBuilder(String str)

Method Summary

Methods
Modifier and Type Method and Description StringBuilder append(boolean b) StringBuilder append(char c) StringBuilder append(char[] str) StringBuilder append(char[] str, int offset, int len) StringBuilder append(CharSequence s) StringBuilder append(CharSequence s, int start, int end) StringBuilder append(double d) StringBuilder append(float f) StringBuilder append(int i) StringBuilder append(long lng) StringBuilder append(Object obj) StringBuilder append(String str) StringBuilder append(StringBuffer sb) StringBuilder appendCodePoint(int codePoint) int capacity() char charAt(int index) int codePointAt(int index) int codePointBefore(int index) int codePointCount(int beginIndex, int endIndex) StringBuilder delete(int start, int end) StringBuilder deleteCharAt(int index) void ensureCapacity(int minimumCapacity) void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) int indexOf(String str) int indexOf(String str, int fromIndex) StringBuilder insert(int offset, boolean b) StringBuilder insert(int offset, char c) StringBuilder insert(int offset, char[] str) StringBuilder insert(int index, char[] str, int offset, int len) StringBuilder insert(int dstOffset, CharSequence s) StringBuilder insert(int dstOffset, CharSequence s, int start, int end) StringBuilder insert(int offset, double d) StringBuilder insert(int offset, float f) StringBuilder insert(int offset, int i) StringBuilder insert(int offset, long l) StringBuilder insert(int offset, Object obj) StringBuilder insert(int offset, String str) int lastIndexOf(String str) int lastIndexOf(String str, int fromIndex) int length() int offsetByCodePoints(int index, int codePointOffset) StringBuilder replace(int start, int end, String str) StringBuilder reverse() void setCharAt(int index, char ch) void setLength(int newLength) CharSequence subSequence(int start, int end) String substring(int start) String substring(int start, int end) String toString() void trimToSize()

Methods inherited from class java.lang.Object

Methods inherited from interface java.lang.CharSequence

Constructor Detail

StringBuilder

StringBuilder

StringBuilder

StringBuilder

Method Detail

append

The overall effect is exactly as if the argument were converted to a string by the method String.valueOf(Object) , and the characters of that string were then appended to this character sequence.

append

The characters of the String argument are appended, in order, increasing the length of this sequence by the length of the argument. If str is null , then the four characters "null" are appended.

Let n be the length of this character sequence just prior to execution of the append method. Then the character at index k in the new character sequence is equal to the character at index k in the old character sequence, if k is less than n; otherwise, it is equal to the character at index k-n in the argument str .

append

The characters of the StringBuffer argument are appended, in order, to this sequence, increasing the length of this sequence by the length of the argument. If sb is null, then the four characters "null" are appended to this sequence.

Let n be the length of this character sequence just prior to execution of the append method. Then the character at index k in the new character sequence is equal to the character at index k in the old character sequence, if k is less than n; otherwise, it is equal to the character at index k-n in the argument sb .

append

Depending on which class implements the character sequence csq, the entire sequence may not be appended. For instance, if csq is a CharBuffer then the subsequence to append is defined by the buffer’s position and limit.

append

Characters of the argument s , starting at index start , are appended, in order, to the contents of this sequence up to the (exclusive) index end . The length of this sequence is increased by the value of end — start .

Читайте также:  Outlook не открывает ссылки

Let n be the length of this character sequence just prior to execution of the append method. Then the character at index k in this character sequence becomes equal to the character at index k in this sequence, if k is less than n; otherwise, it is equal to the character at index k+start-n in the argument s .

If s is null , then this method appends characters as if the s parameter was a sequence containing the four characters "null" .

append

The characters of the array argument are appended, in order, to the contents of this sequence. The length of this sequence increases by the length of the argument.

The overall effect is exactly as if the argument were converted to a string by the method String.valueOf(char[]) , and the characters of that string were then appended to this character sequence.

append

Characters of the char array str , starting at index offset , are appended, in order, to the contents of this sequence. The length of this sequence increases by the value of len .

The overall effect is exactly as if the arguments were converted to a string by the method String.valueOf(char[],int,int) , and the characters of that string were then appended to this character sequence.

append

The overall effect is exactly as if the argument were converted to a string by the method String.valueOf(boolean) , and the characters of that string were then appended to this character sequence.

append

The argument is appended to the contents of this sequence. The length of this sequence increases by 1 .

The overall effect is exactly as if the argument were converted to a string by the method String.valueOf(char) , and the character in that string were then appended to this character sequence.

append

The overall effect is exactly as if the argument were converted to a string by the method String.valueOf(int) , and the characters of that string were then appended to this character sequence.

append

The overall effect is exactly as if the argument were converted to a string by the method String.valueOf(long) , and the characters of that string were then appended to this character sequence.

append

The overall effect is exactly as if the argument were converted to a string by the method String.valueOf(float) , and the characters of that string were then appended to this character sequence.

append

The overall effect is exactly as if the argument were converted to a string by the method String.valueOf(double) , and the characters of that string were then appended to this character sequence.

appendCodePoint

The argument is appended to the contents of this sequence. The length of this sequence increases by Character.charCount(codePoint) .

The overall effect is exactly as if the argument were converted to a char array by the method Character.toChars(int) and the character in that array were then appended to this character sequence.

delete

deleteCharAt

Note: If the character at the given index is a supplementary character, this method does not remove the entire character. If correct handling of supplementary characters is required, determine the number of char s to remove by calling Character.charCount(thisSequence.codePointAt(index)) , where thisSequence is this sequence.

replace

insert

insert

The overall effect is exactly as if the second argument were converted to a string by the method String.valueOf(Object) , and the characters of that string were then inserted into this character sequence at the indicated offset.

The offset argument must be greater than or equal to 0 , and less than or equal to the length of this sequence.

insert

The characters of the String argument are inserted, in order, into this sequence at the indicated offset, moving up any characters originally above that position and increasing the length of this sequence by the length of the argument. If str is null , then the four characters "null" are inserted into this sequence.

The character at index k in the new character sequence is equal to:

  • the character at index k in the old character sequence, if k is less than offset
  • the character at index k -offset in the argument str , if k is not less than offset but is less than offset+str.length()
  • the character at index k -str.length() in the old character sequence, if k is not less than offset+str.length()

The offset argument must be greater than or equal to 0 , and less than or equal to the length of this sequence.

insert

The characters of the array argument are inserted into the contents of this sequence at the position indicated by offset . The length of this sequence increases by the length of the argument.

The overall effect is exactly as if the second argument were converted to a string by the method String.valueOf(char[]) , and the characters of that string were then inserted into this character sequence at the indicated offset.

The offset argument must be greater than or equal to 0 , and less than or equal to the length of this sequence.

insert

The characters of the CharSequence argument are inserted, in order, into this sequence at the indicated offset, moving up any characters originally above that position and increasing the length of this sequence by the length of the argument s.

The result of this method is exactly the same as if it were an invocation of this object’s insert (dstOffset, s, 0, s.length()) method.

If s is null , then the four characters "null" are inserted into this sequence.

Читайте также:  Madvr что это за программа

insert

The subsequence of the argument s specified by start and end are inserted, in order, into this sequence at the specified destination offset, moving up any characters originally above that position. The length of this sequence is increased by end — start .

The character at index k in this sequence becomes equal to:

  • the character at index k in this sequence, if k is less than dstOffset
  • the character at index k +start-dstOffset in the argument s , if k is greater than or equal to dstOffset but is less than dstOffset+end-start
  • the character at index k -(end-start) in this sequence, if k is greater than or equal to dstOffset+end-start

The dstOffset argument must be greater than or equal to 0 , and less than or equal to the length of this sequence.

The start argument must be nonnegative, and not greater than end .

The end argument must be greater than or equal to start , and less than or equal to the length of s.

If s is null , then this method inserts characters as if the s parameter was a sequence containing the four characters "null" .

insert

The overall effect is exactly as if the second argument were converted to a string by the method String.valueOf(boolean) , and the characters of that string were then inserted into this character sequence at the indicated offset.

The offset argument must be greater than or equal to 0 , and less than or equal to the length of this sequence.

insert

The overall effect is exactly as if the second argument were converted to a string by the method String.valueOf(char) , and the character in that string were then inserted into this character sequence at the indicated offset.

The offset argument must be greater than or equal to 0 , and less than or equal to the length of this sequence.

insert

The overall effect is exactly as if the second argument were converted to a string by the method String.valueOf(int) , and the characters of that string were then inserted into this character sequence at the indicated offset.

The offset argument must be greater than or equal to 0 , and less than or equal to the length of this sequence.

insert

The overall effect is exactly as if the second argument were converted to a string by the method String.valueOf(long) , and the characters of that string were then inserted into this character sequence at the indicated offset.

The offset argument must be greater than or equal to 0 , and less than or equal to the length of this sequence.

insert

The overall effect is exactly as if the second argument were converted to a string by the method String.valueOf(float) , and the characters of that string were then inserted into this character sequence at the indicated offset.

The offset argument must be greater than or equal to 0 , and less than or equal to the length of this sequence.

insert

The overall effect is exactly as if the second argument were converted to a string by the method String.valueOf(double) , and the characters of that string were then inserted into this character sequence at the indicated offset.

The offset argument must be greater than or equal to 0 , and less than or equal to the length of this sequence.

indexOf

indexOf

lastIndexOf

lastIndexOf

reverse

Note that the reverse operation may result in producing surrogate pairs that were unpaired low-surrogates and high-surrogates before the operation. For example, reversing "uDC00uD800" produces "uD800uDC00" which is a valid surrogate pair.

toString

length

capacity

ensureCapacity

trimToSize

setLength

If the newLength argument is greater than or equal to the current length, sufficient null characters ( ‘u0000’ ) are appended so that length becomes the newLength argument.

The newLength argument must be greater than or equal to 0 .

charAt

The index argument must be greater than or equal to 0 , and less than the length of this sequence.

If the char value specified by the index is a surrogate, the surrogate value is returned.

codePointAt

If the char value specified at the given index is in the high-surrogate range, the following index is less than the length of this sequence, and the char value at the following index is in the low-surrogate range, then the supplementary code point corresponding to this surrogate pair is returned. Otherwise, the char value at the given index is returned.

codePointBefore

If the char value at (index — 1) is in the low-surrogate range, (index — 2) is not negative, and the char value at (index — 2) is in the high-surrogate range, then the supplementary code point value of the surrogate pair is returned. If the char value at index — 1 is an unpaired low-surrogate or a high-surrogate, the surrogate value is returned.

codePointCount

offsetByCodePoints

getChars

setCharAt

The index argument must be greater than or equal to 0 , and less than the length of this sequence.

substring

subSequence

An invocation of this method of the form

substring

  • Overview
  • Package
  • >Java™ Platform
    Standard Ed. 7
  • Summary:
  • Nested |
  • Field |
  • Constr |
  • Method
  • Detail:
  • Field |
  • Constr |
  • Method

Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2018, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.

Ссылка на основную публикацию
Adblock detector