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-а принцип такой же.
String Builder. Clear Method
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Removes all characters from the current StringBuilder instance.
public: System::Text::StringBuilder ^ Clear();
public System.Text.StringBuilder Clear ();
member this.Clear : unit -> System.Text.StringBuilder
Public Function Clear () As StringBuilder
Returns
An object whose Length is 0 (zero).
Examples
The following example instantiates a StringBuilder object with a string, calls the Clear method, and then appends a new string.
using System; using System.Text; public class Class1 < public static void Main() < StringBuilder sb = new StringBuilder("This is a string."); Console.WriteLine("( characters)", sb.ToString(), sb.Length); sb.Clear(); Console.WriteLine(" ( characters)", sb.ToString(), sb.Length); sb.Append("This is a second string."); Console.WriteLine(" ( characters)", sb.ToString(), sb.Length); > > // The example displays the following output: // This is a string. (17 characters) // (0 characters) // This is a second string. (24 characters)
open System.Text let sb = StringBuilder "This is a string." printfn $" ( characters)" sb.Clear() |> ignore printfn $" ( characters)" sb.Append "This is a second string." |> ignore printfn $" ( characters)" // The example displays the following output: // This is a string. (17 characters) // (0 characters) // This is a second string. (24 characters)
Imports System.Text Module Example Public Sub Main() Dim sb As New StringBuilder("This is a string.") Console.WriteLine(" ( characters)", sb.ToString(), sb.Length) sb.Clear() Console.WriteLine(" ( characters)", sb.ToString(), sb.Length) sb.Append("This is a second string.") Console.WriteLine(" ( characters)", sb.ToString(), sb.Length) End Sub End Module ' The example displays the following output: ' This is a string. (17 characters) ' (0 characters) ' This is a second string. (24 characters)
Remarks
Clear is a convenience method that is equivalent to setting the Length property of the current instance to 0 (zero).
Удаление подстроки из 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
Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.
Или поделись статьей
Видим, что вы не нашли ответ на свой вопрос.
Помогите улучшить статью.
Напишите комментарий, что можно добавить к статье, какой информации не хватает.
Как очистить stringbuilder java
Здравствуйте, Аноним, Вы писали:
А>Какой метод используете чтобы переиспользовать StringBuilder? Что-то вроде reset.
Зачем?
Re[2]: Как очистить StringBuilder?
| От: | Аноним |
| Дата: | 25.01.10 09:53 |
| Оценка: |
Здравствуйте, Blazkowicz, Вы писали:
B>Здравствуйте, Аноним, Вы писали:
А>>Какой метод используете чтобы переиспользовать StringBuilder? Что-то вроде reset.
B>Зачем?
Чтобы переиспользовать: когда буфер большой и используется интенсивно — это эффективно.
Re[3]: Как очистить StringBuilder?
| От: | Blazkowicz |
| Дата: | 25.01.10 10:00 |
| Оценка: |
Здравствуйте, Аноним, Вы писали:
А>Чтобы переиспользовать: когда буфер большой и используется интенсивно — это эффективно.
Существование Eden space даёт мне серьезный повод сомневаться в этом.
Re: Как очистить StringBuilder?
| От: | LeonidV | http://vygovskiy.com |
| Дата: | 25.01.10 10:28 | |
| Оценка: |
sb = new StringBuffer()
И не задумывайтесь о производительности в таких мелочах, пока профайлер не покажет — надо задумываться.
http://jvmmemory.com — простой способ настройки JVM
Re: Как очистить StringBuilder?
| От: | C0s |
| Дата: | 25.01.10 10:59 |
| Оценка: |
Здравствуйте, Аноним, Вы писали:
А>Какой метод используете чтобы переиспользовать StringBuilder? Что-то вроде reset.
если очень хочется, то setLength(0)
но, как уже заметили другие, зачем?
Re[3]: Как очистить StringBuilder?
| От: | C0s |
| Дата: | 25.01.10 11:02 |
| Оценка: |
Здравствуйте, Аноним, Вы писали:
А>Чтобы переиспользовать: когда буфер большой и используется интенсивно — это эффективно.
некоторые задачи «большой и интенсивной» символьной обработки следует решать с помощью java.nio.CharBuffer
часом, не тот случай?
Re: Как очистить StringBuilder?
| От: | Географ | нет |
| Дата: | 25.01.10 12:45 | |
| Оценка: |
Здравствуйте, Аноним, Вы писали:
А>Какой метод используете чтобы переиспользовать StringBuilder? Что-то вроде reset.
Я лично использую delete(0, Integer.MAX_VALUE). Это опустошает буфер, начиная с первого индекса, и сохраняя зарезервированную перед этим память для будущего переиспользования. Это лучше, чем вызов setLength(0) тем, что setLength устанавливает вместо старого новый буферок длиной 16 символов, как это принято в конструкторе по умолчанию. Проверено на версии 1.4. Если основная работа идёт со строками, то утакой методой уменьшается нагрузка на менеджер памяти, полагаю. Впрочем, ещё больше зависит от постановки задачи, как и всегда.
Re[2]: Как очистить StringBuilder?
| От: | C0s | |
| Дата: | 25.01.10 13:23 | |
| Оценка: | 2 (1) +1 | |
Здравствуйте, Географ, Вы писали:
Г>Это лучше, чем вызов setLength(0) тем, что setLength устанавливает вместо старого новый буферок длиной 16 символов, как это принято в конструкторе по умолчанию. Проверено на версии 1.4.
так было и осталось в 1.4, которая уже практически сама знаете где
начиная с 1.5 setLength массив оставляет как есть — смотрю по исходникам sun
Re[3]: Как очистить StringBuilder?
| От: | Географ | нет |
| Дата: | 25.01.10 15:18 | |
| Оценка: |
Здравствуйте, C0s, Вы писали:
C0s>Здравствуйте, Географ, Вы писали:
Г>>Это лучше, чем вызов setLength(0) тем, что setLength устанавливает вместо старого новый буферок длиной 16 символов, как это принято в конструкторе по умолчанию. Проверено на версии 1.4.
C0s>так было и осталось в 1.4, которая уже практически сама знаете где
C0s>начиная с 1.5 setLength массив оставляет как есть — смотрю по исходникам sun
Значит, так и есть. Но 1.4 применяется во многих реальных проектах, втом числе и в госконторах с очень большими размерами кода и данных. Например, РЖД, ФМС, МВД — это только то, где я лично участвую сегодня.
И что setLength(. ), что delete(. ) делают одно и тоже . Короче, дело вкуса. И версии Java .
Re[4]: Как очистить StringBuilder?
| От: | C0s |
| Дата: | 25.01.10 15:32 |
| Оценка: |
Здравствуйте, Географ, Вы писали:
Г>Значит, так и есть. Но 1.4 применяется во многих реальных проектах, втом числе и в госконторах с очень большими размерами кода и данных. Например, РЖД, ФМС, МВД — это только то, где я лично участвую сегодня.
о, повод спросить не по теме топика
а в этих конторах покупают поддержку sun и используют солярис?
и если нет, то является ли это поводом думать при очередной коллизии поездов из-за какой-нибудь не сработавшей стрелки или семафора, что это из-за использования устаревшей платформы?
Re[3]: Как очистить StringBuilder?
| От: | Blazkowicz |
| Дата: | 25.01.10 16:17 |
| Оценка: |
Здравствуйте, C0s, Вы писали:
C0s>смотрю по исходникам sun
Мне кажется что другие вендоры никак не модифицируют основной код java.* API. Вся разница касается в основном реалиазации внутренних механизмов JVM.
Re[5]: Как очистить StringBuilder?
| От: | toxin |
| Дата: | 26.01.10 07:05 |
| Оценка: |
Здравствуйте, C0s, Вы писали:
C0s>о, повод спросить не по теме топика
C0s>а в этих конторах покупают поддержку sun и используют солярис?
C0s>и если нет, то является ли это поводом думать при очередной коллизии поездов из-за какой-нибудь не сработавшей стрелки или семафора, что это из-за использования устаревшей платформы?
А что есть маниаки которые яву в софт для оперативного диспетчерского управления пихают?
Сдается мне ява там используется для всякого рода ИС не имеющих прямого отношения к управлению стрелками и семафорами, и они там могут хоть 1.1 использовать в силу жесткого консерватизма местных админов и кучки софта, которая временами на 1.5 даже не запускается