Stringbuilder java delete
Классы StringBuffer и StringBuilder
Класс String представляет собой неизменяемые последовательности символов постоянной длины и частое использование объектов класса занимают много места в памяти. Класс StringBuffer представляет расширяемые и доступные для изменений последовательности символов, позволяя вставлять символы и подстроки в существующую строку и в любом месте. Данный класс гораздо экономичнее в плане потребления памяти и настоятельно рекомендуется к использованию.
Существует четыре конструктора класса:
- StringBuffer() — резервирует место под 16 символов без перераспределения памяти
- StringBuffer(int capacity) — явно устанавливает размер буфера
- StringBuffer(String string) — устанавливает начальное содержимое и резервирует 16 символов без повторого резервирования
- 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() по отдельности. Но это будет заметно при очень больших объёмах.
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.
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.
Как очистить или очистить StringBuilder? [дубликат]
этот вопрос уже есть ответ здесь:
Я использую StringBuilder в цикле и каждые X итераций я хочу очистить его и начать с пустого StringBuilder , но я не вижу никакого метода, подобного .NET StringBuilder.Ясно!—7—> в документации, просто удалить метод, который кажется чрезмерно сложным.
Итак, каков наилучший способ очистить StringBuilder в Java?
9 ответов
два способа работы:
- использовать stringBuilderObj.setLength(0) .
- выделить новый с new StringBuilder() вместо очистки буфера.
есть в основном два варианта, используя setLength(0) для сброса StringBuilder или создания нового на каждой итерации. Оба имеют свои плюсы и минусы в зависимости от использования.
Если вы заранее знаете ожидаемую емкость StringBuilder, создание нового каждый раз должно быть таким же быстрым, как установка новой длины. Это также поможет сборщику мусора, так как каждый StringBuilder будет относительно недолговечным, и gc оптимизирован для этого.
когда вы не знаете емкость, повторное использование того же StringBuilder может быть быстрее. При каждом превышении емкости при добавлении необходимо выделить новый резервный массив и скопировать предыдущее содержимое. Повторно используя тот же StringBuilder, он достигнет необходимой емкости после некоторых итераций, и после этого не будет никакого копирования.
delete — это не слишком сложно :
вы также можете сделать :
Если вы посмотрите на исходный код StringBuilder или StringBuffer, вызов setLength () просто сбрасывает значение индекса для массива символов. IMHO с использованием метода setLength всегда будет быстрее, чем новое распределение. Они должны были назвать метод «clear» или «reset», чтобы он был более ясным.
Я буду голосовать за sb.setLength(0); не только потому, что это один вызов функции, но потому что он фактически не копирует массив в другой массив как sb.delete(0, builder.length()); . Он просто заполняет оставшиеся символы равными 0 и устанавливает переменную длины в новую длину.
вы можете взглянуть на их реализацию, чтобы проверить мою точку зрения из здесь at setLength функции .
Это самый простой способ.
вы должны использовать sb.delete(0, sb.length()) или sb.setLength(0) и не создавать новый StringBuilder ().
Я думаю, что многие из ответов здесь могут отсутствовать метод качества, включенный в StringBuilder : .delete(int start, [int] end) . Я знаю, что это поздний ответ, однако, это должно быть известно (и объяснить немного более подробно).
предположим, у вас есть таблица StringBuilder , которую вы хотите динамически изменять в своей программе (над которой я сейчас работаю), например
если вы выполняете цикл через метод и изменяете содержимое, используйте содержимое, а затем желание отказаться от контента, чтобы «очистить» StringBuilder для следующей итерации, вы можете удалить его содержимое, например,
начало и конец являются индексами символов, которые вы хотите удалить. Не знаете длину в символах и хотите удалить все это?
теперь, для кикера. StringBuilders , как упоминалось ранее, возьмите много накладных расходов при частом изменении (и может вызвать проблемы безопасности в отношении резьбы); поэтому используйте StringBuffer — то же, что StringBuilder (за несколькими исключениями) — если ваш StringBuilder используется с целью взаимодействия с пользователем.
Если производительность является основной проблемой . ирония (IMO) — это конструкции Java для форматирования текста, который идет на буфер будет гораздо более трудоемким на CPU, чем сборщик alloc/realloc/мусора . ну, возможно, не GC в зависимости от того, сколько строителей вы создаете и отбрасываете.
но просто добавляя составную строку («Hello World of» + 6E9 + » earthlings.») к буферу, вероятно, сделает все дело непоследовательный.
и, действительно, если StringBuilder участвует, контент сложный и длинный и длиннее, чем простой String str = «Hi»; (неважно, что Java, вероятно, использует построитель в фоновом режиме).
лично я стараюсь не злоупотреблять GC. Поэтому, если это что — то, что будет много использоваться в сценарии быстрого огня, например, написание выходных сообщений отладки . Я просто предполагаю объявить его в другом месте и обнулить его для повторного использования.
Строки в Java: String, StringBuilder, StringBuffer
Настало время поговорить о работе со строками. Это та самая работа со String, которую я обещал показать в одной из первых статей. В языке Java нет примитивных типов для строк, но есть несколько объектов, которые предназначенные для этого: String, StringBuilder, StringBuffer.
На практике Вы будете больше работать и встречать объект String, как один из самых удобный и наиболее применяемых объектов для работы со строковыми переменными в джава. Именно его функционал мы сегодня и рассмотрим.
Класс String — основной класс представляющий строки
Мы уже создавали строковые переменные и тогда я просил Вас поверить мне на слово и просто писать что-то вроде: String hello = «Hello world». Это и есть первый способ создать строковую переменную. Второй способ — это создать строку как мы создаем экземпляр класса, новые объекты через ключевое слово new. String hello = new String(«Hello world»). Различия в способах более существенны, чем кажутся на первый взгляд. Для того чтобы понять их нужно немного узнать о распределении памяти.
В языке Java объекты хранятся в куче (heap), а примитивные типы и ссылки на объекты в стеке (stack). Но есть еще такой механизм как пул (pool). Это механизм, если можно так назвать, сохранения строковых переменных для экономии места в памяти. Я нарисовал примерную схему. И попытаюсь объяснить по ней:
Выглядит не очень. Я знаю.
Когда мы создаем строку через ключевое слово new, тогда создается одна строка в пуле и в куче. Если строка создается без ключевого слова new, вот таким образом: String hello = «Hello world» — тогда она создается только в пуле. Если так создать точно такую же строку, новый объект не создается, а две переменные ссылаются на один объект в пуле. Такой механизм пула есть только в объекта String и классов-оберток для примитивных типов (о них мы еще поговорим).
Заметьте, как работает память с другими объектами. На примере объекта Cat видно, что при создании нового объекта с той же самой ссылкой, старый объект уничтожается сборщиком мусора — это специальный механизм в Java, задача которого освобождать память от ненужных объектов (тех на которые потеряна ссылка).
Основные методы строк
Теперь что касается методов со строками. Класс String в этом плане имеет множество полезных методов; наиболее полезные и часто используемые мы сейчас разберем.
- lengtn() — возвращает длину строки;
- charAt(int number) — возвращает символ по указанному индексу. Отсчет идет с 0;
- indexOf(char sumbol) — возвращает индекс по указанному символу. Если символа не найдено возвращается -1;
- substring(int startIndex) — возвращает подстроку строки начиная с указанного индекса;
- substring(int startIndex, int endIndex) — возвращает подстроку строки начиная с указанного индекса и заканчивая указанным индексом;
- startsWith(String sumbolOrSumbols) — возвращает true если строка начинается с указанного слова или символа;
- toLowerCase() — переводит строку в нижний регистр;
- toUpperCase() — переводит строку в верхний регистр;
- replaceAll(String partWhichReplace, String partOnWhichReplace) — заменяет часть строки на заменяемую строку
- equals(String strToCompare) — сравнение строк. Данный метод используется для сравнения объектов не по ссылке, а по содержанию;
- equalsIgnoreCase(String strToCompare) — сравнение без учета регистра;
- trim() — убирает пробелы в конце и в начале строки (если есть);
- toCharArray() — разбивает строку на массив char;
- split(String reqexp) — разбивает строку по заданному символу.
Как очистить или удалить 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. Так что если это будет что-то, что будет использоваться в сценарии быстрого пожара — например, написав выходные сообщения отладки. Я просто предполагаю, что объявляю его в другом месте и обнуляю его для повторного использования.