Как очистить stringbuilder java
Перейти к содержимому

Как очистить stringbuilder java

  • автор:

Java: очищаемм содержимое StringBuilder/StringBuffer

Для сложения большого количества строк гораздо эффективнее использовать объект StringBuilder (в многопоточной среде StringBuffer ). Но иногда возникает необходимость в очистке содержиммого StringBuilder -а. К сожалению данный класс не имеет метода, который бы очищал его содержимое. Но выход из ситуации есть: можно воспользоваться методом delete(int start, int end) класса StringBuilder , который удаляет строчки начиная с позиции start до позиции end .

В качестве начальной позиции необходимо указать 0, в в качестве конечной позиции — длинну содержимого StringBuilder-а. Выглядеть это все будет приерно так:

sb.delete(0, sb.length()); 
public class Test    public static void main (String[] args)   StringBuffer sb = new StringBuffer();   sb.append("This is StringBuilder ");  sb.append("example");   System.out.println("StringBuilder content before cleaning: \n" +  sb.toString());   //removing StringBuilder content  sb.delete(0, sb.length());   sb.append("This is new StringBuilder content");  System.out.println("\n" + sb.toString());  > > 
StringBuilder content before cleaning: This is StringBuilder exampleThis is new StringBuilder content 

Для StringBuffer-а принцип такой же.

Как очистить stringbuilder java

А>>Какой метод используете чтобы переиспользовать StringBuilder? Что-то вроде reset.
B>Зачем?

Чтобы переиспользовать: когда буфер большой и используется интенсивно — это эффективно.

От: Blazkowicz
Дата: 25.01.10 10:00
Оценка:
От: LeonidV http://vygovskiy.com
Дата: 25.01.10 10:28
Оценка:

И не задумывайтесь о производительности в таких мелочах, пока профайлер не покажет — надо задумываться.

От: C0s
Дата: 25.01.10 10:59
Оценка:

Здравствуйте, Аноним, Вы писали:

А>Какой метод используете чтобы переиспользовать StringBuilder? Что-то вроде reset.

если очень хочется, то setLength(0)
но, как уже заметили другие, зачем?

От: C0s
Дата: 25.01.10 11:02
Оценка:

Здравствуйте, Аноним, Вы писали:

А>Чтобы переиспользовать: когда буфер большой и используется интенсивно — это эффективно.

некоторые задачи «большой и интенсивной» символьной обработки следует решать с помощью java.nio.CharBuffer
часом, не тот случай?

От: Географ нет
Дата: 25.01.10 12:45
Оценка:
От: C0s
Дата: 25.01.10 13:23
Оценка: 2 (1) +1

Здравствуйте, Географ, Вы писали:

Г>Это лучше, чем вызов setLength(0) тем, что setLength устанавливает вместо старого новый буферок длиной 16 символов, как это принято в конструкторе по умолчанию. Проверено на версии 1.4.

так было и осталось в 1.4, которая уже практически сама знаете где
начиная с 1.5 setLength массив оставляет как есть — смотрю по исходникам sun

От: Географ нет
Дата: 25.01.10 15:18
Оценка:
От: C0s
Дата: 25.01.10 15:32
Оценка:

Здравствуйте, Географ, Вы писали:

Г>Значит, так и есть. Но 1.4 применяется во многих реальных проектах, втом числе и в госконторах с очень большими размерами кода и данных. Например, РЖД, ФМС, МВД — это только то, где я лично участвую сегодня.

о, повод спросить не по теме топика
а в этих конторах покупают поддержку sun и используют солярис?
и если нет, то является ли это поводом думать при очередной коллизии поездов из-за какой-нибудь не сработавшей стрелки или семафора, что это из-за использования устаревшей платформы?

От: Blazkowicz
Дата: 25.01.10 16:17
Оценка:
От: toxin
Дата: 26.01.10 07:05
Оценка:

Здравствуйте, C0s, Вы писали:

C0s>о, повод спросить не по теме топика
C0s>а в этих конторах покупают поддержку sun и используют солярис?
C0s>и если нет, то является ли это поводом думать при очередной коллизии поездов из-за какой-нибудь не сработавшей стрелки или семафора, что это из-за использования устаревшей платформы?

А что есть маниаки которые яву в софт для оперативного диспетчерского управления пихают?
Сдается мне ява там используется для всякого рода ИС не имеющих прямого отношения к управлению стрелками и семафорами, и они там могут хоть 1.1 использовать в силу жесткого консерватизма местных админов и кучки софта, которая временами на 1.5 даже не запускается

Удаление подстроки из StringBuilder в Java

Чтобы удалить подстроку из объекта Java StringBuilder, мы используем метод delete(). Метод delete() удаляет символы в диапазоне из последовательности. Имеет два параметра, начало и конец. Символы удаляются из индекса начала до конца.

Объявление – метод java.lang.StringBuilder.delete() объявляется следующим образом:

Давайте посмотрим пример, который удаляет подстроку из StringBuilder.

Пример

Вывод

Средняя оценка / 5. Количество голосов:

Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.

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

Я использую StringBuilder в цикле и каждые X итераций я хочу очистить его и начать с пустого StringBuilder , но я не вижу никакого метода, подобного .NET StringBuilder.Ясно!—7—> в документации, просто удалить метод, который кажется чрезмерно сложным.

Итак, каков наилучший способ очистить StringBuilder в Java?

9 ответов

два способа работы:

  1. использовать stringBuilderObj.setLength(0) .
  2. выделить новый с 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 stringbuilder удалить последний символ

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

16 ответов

другие указали на deleteCharAt метод, но вот еще один альтернативный подход:

начиная с Java 8, StringJoiner является частью стандартного JRE.

другое простое решение-это:

более сложное решение:

вышеуказанное решение предполагает, что sb.length() > 0 . т. е. есть» последний символ » для удаления. Если вы не можете сделать это предположение и/или не можете справиться с исключением, которое возникнет, если предположение неверно, сначала проверьте длину StringBuilder; например

начиная с Java 8, класс String имеет статический метод join . Первый аргумент-это строка, которую вы хотите между каждой парой строк, а второй — Iterable (которые являются обоими интерфейсами, поэтому что-то вроде List строительство. Таким образом, вы можете просто сделать это:

также в Java 8 вы можете использовать новый StringJoiner class, для сценариев, где вы хотите начать построение строки, прежде чем у вас будет полный список элементов для ввода он.

предпочтительнее, так как он просто назначает последнее значение ‘ ‘ тогда как удаление последнего символа делает System.arraycopy

просто получите позицию последнего появления символа.

С lastIndexOf выполнит обратный поиск, и вы знаете, что он найдет с первой попытки, производительность не будет проблемой здесь.

274 Matthew [2010-08-03 12:41:00]

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

Дает что-то вроде: serverId_1, serverId_2, serverId_3,

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

15 ответов

460 Решение Jon Skeet [2010-08-03 12:49:00]

Другие указали метод deleteCharAt , но здесь другой альтернативный подход:

В качестве альтернативы используйте Joiner класс из Guava:)

Начиная с Java 8, StringJoiner является частью стандартного JRE.

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

Дает что-то вроде: serverId_1, serverId_2, serverId_3,

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

16 ответов

Другие указали на метод deleteCharAt , но есть еще один альтернативный подход:

В качестве альтернативы используйте класс Joiner из Guava ��

Начиная с Java 8, StringJoiner является частью стандартного JRE.

Другое простое решение:

Более сложное решение:

Приведенное выше решение предполагает, что sb.length() > 0 . т.е. есть «последний символ» для удаления. Если вы не можете сделать это предположение, и / или вы не можете справиться с исключением, которое возникнет, если это предположение неверно, то сначала проверьте длину StringBuilder; например

Начиная с Java 8, класс String имеет статический метод join . Первый аргумент — это строка, которую вы хотите Iterable между каждой парой строк, а второй — это Iterable (оба являются интерфейсами, поэтому работает что-то вроде List . Поэтому вы можете просто сделать это:

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

предпочтительнее, так как он просто присваивает последнее значение ‘

Похожие публикации:

  1. Как проверить пустой ли словарь python
  2. Как прочитать все сообщения в gmail айфон
  3. Как сделать камень ножницы бумага на python
  4. Как сделать плитку в 3d max

Очистка объекта StringBuilder в Java

Часто встречается ситуация, когда в процессе работы с объектом StringBuilder в Java возникает необходимость его очистить. Например, если используется цикл, в котором StringBuilder наполняется данными, и после каждого n-го повторения цикла требуется начать с пустого StringBuilder .

В Java нет прямого аналога метода Clear , который имеется в .NET для очистки StringBuilder . Вместо этого в Java есть метод delete() , который позволяет удалить подстроку из строки, хранящейся в StringBuilder . Однако использование этого метода может казаться сложным и избыточным, если нужно просто полностью очистить StringBuilder .

Наиболее простым и эффективным способом очистки StringBuilder в Java является присвоение ему нового экземпляра StringBuilder . Это можно сделать следующим образом:

StringBuilder sb = new StringBuilder(); sb.append("Hello, World!"); // Теперь sb содержит "Hello, World!" sb = new StringBuilder(); // Теперь sb пуст

Такой подход работает, потому что в Java объекты являются ссылочными типами. Когда sb присваивается новый экземпляр StringBuilder , старый экземпляр, содержащий «Hello, World!», больше не доступен и будет утилизирован сборщиком мусора.

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

Удаление подстроки из StringBuilder в Java

Чтобы удалить подстроку из объекта Java StringBuilder, мы используем метод delete(). Метод delete() удаляет символы в диапазоне из последовательности. Имеет два параметра, начало и конец. Символы удаляются из индекса начала до конца.

Объявление – метод java.lang.StringBuilder.delete() объявляется следующим образом:

public StringBuilder delete(int start,int end)

Давайте посмотрим пример, который удаляет подстроку из StringBuilder.

Пример

public class Example < public static void main(String[] args) < StringBuilder sb = new StringBuilder("Welcome to Java Programming"); System.out.println("Original StringBuilder Object: " + sb.toString()); sb.delete(4,10); System.out.println("New StringBuilder Object: " + sb.toString()); >>

Вывод

Original StringBuffer Object: Welcome to Java Programming New StringBuffer Object: Welc Java Programming

Средняя оценка 3 / 5. Количество голосов: 3

Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.

Или поделись статьей

Видим, что вы не нашли ответ на свой вопрос.

Помогите улучшить статью.

Напишите комментарий, что можно добавить к статье, какой информации не хватает.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *