„Поздрави, амиго!“

„Здравей, Риши!“

„Вече знаете достатъчно за низовете, за да научите нещо интересно. По-конкретно, нов клас, който е подобен, но не съвсем същия като класа String.“

„Звучи интригуващо, въпреки че не ми е напълно ясно How обикновените низове не успяват и защо са необходими други класове, подобни на низове.“

„Нека започнем с факта, че низовете са неизменни обекти в Java.“

"Как е това? Забравих... Или никога не съм знаел като начало..."

„Позволете ми да ви напомня, че неизменните обекти са тези, чиито състояния не могат да бъдат променени, след като са създадени.“

„Аааа... Защо низовете са неизменни в Java?“

„Това беше напequalsо, за да направим класа String силно оптимизиран и да му позволим да се използва навсякъде. Например, само неизменни типове се препоръчват за използване като ключове в колекцията HashMap .

„Въпреки това често възникват ситуации, когато програмистите биха намерor за по-удобно класът String да бъде променлив. Те искат клас, който не създава нов подниз всеки път, когато се извика един от неговите методи.“

— Но за Howво е полезно?

„Е, да предположим, че имаме много голям низ и трябва често да добавяме нещо към края му. В този случай дори колекция от символи ( ArrayList<Character>) може да бъде по-ефективна от постоянното пресъздаване и свързване на String обекти.“

„И затова се нуждаем от низове, които не са точно класът String?“

„Точно така. Езикът Java е добавил String-подобен тип, който може да се променя. Нарича се StringBuilder„.

Създаване на обект

„За да създадете StringBuilderобект въз основа на съществуващ низ, трябва да изпълните оператор като:

StringBuilder name = new StringBuilder(string);

„За да създадете празен променлив низ, трябва да използвате израз като този:

StringBuilder name = new StringBuilder();

Списък с методи

StringBuilderКласът има две дузини полезни методи. Ето най-важните:

Метод Описание
StringBuilder append(obj)
Преобразува подавания обект в низ и го добавя към текущия низ
StringBuilder insert(int index, obj)
Преобразува подавания обект в низ и вмъква в средата на текущия низ
StringBuilder replace(int start, int end, String str)
Заменя частта от низа, указана от интервала start..end, с подаден низ
StringBuilder deleteCharAt(int index)
Премахва знака с посочения индекс от низа
StringBuilder delete(int start, int end)
Премахва символи в посочения интервал от низа
int indexOf(String str, int index)
Търси подниз в текущия низ
int lastIndexOf(String str, int index)
Търси подниз в текущия низ, започвайки от края
char charAt(int index)
Връща знака в низа при подаден индекс
String substring(int start, int end)
Връща подниза, дефиниран от посочения интервал
StringBuilder reverse()
Обръща текущия низ.
void setCharAt(int index, char)
Променя знака при посочения индекс на предадения знак
int length()
Връща дължината на низа в знаци

„А сега ще ви опиша накратко всеки от тези методи.

Добавяне към низ

„За да добавите нещо към променлив низ ( StringBuilder), използвайте append()метода. Пример:

Код Описание
StringBuilder builder = new StringBuilder("Hi");
builder.append("Bye");
builder.append(123);
Hi
HiBye
HiBye123

Преобразуване в standardн низ

„За да конвертирате StringBuilderобект в String обект, просто трябва да извикате неговия toString()метод. Пример

Код Изход
StringBuilder builder = new StringBuilder("Hi");
builder.append(123);
String result = builder.toString();
System.out.println(result);
Hi123

Как да изтрия знак?

„За да изтриете символ в променлив низ, трябва да използвате deleteCharAt()метода. Пример:

Код Изход
StringBuilder builder = new StringBuilder("Hello");
builder.deleteCharAt(2);
String result = builder.toString();
System.out.println(result);
Helo

Как да заменя част от низ с друг низ?

„За това има replace(int begin, int end, String str)метод. Пример:

Код Изход
StringBuilder builder = new StringBuilder("Mellow");
builder.replace(2, 5, "Hello!");
String result = builder.toString();
System.out.println(result);
MeHello!w

„Звучи удобно. Благодаря ти, Риши.“

„Не го споменавайте. Какво ще кажете за това, можете ли да обърнете струна назад? Как бихте го направor?“

„Ами... Бих създал StringBuilder, сложил низ в него... След това създал нов низ и в цикъл от последния знак към първия... Или може би побитово изместване...

„Не е зле. Но може да бъде по-бързо. Има специален метод за това — reverse();Пример:

Код Изход
String str = "Hello";
StringBuilder builder = new StringBuilder(str);
builder.reverse();
String result = builder.toString();
System.out.println(result);
olleH

"Освен StringBuilderкласа, Java има друг клас, подобен на низ, наречен StringBuffer. Той е аналог на StringBuilderкласа, но неговите методи са маркирани с synchronizedмодификатора."

"Какво означава това?"

„Това означава, че StringBufferобектът може да бъде достъпен едновременно от множество нишки.“

„Все още не съм много запознат с нишките. Но „може да бъде достъпен от множество нишки“ е очевидно по-добре от „не може да бъде достъпен от множество нишки“... Защо тогава да не използвате винаги? StringBuffer

„Тъй като е много по-бавен от StringBuilder. Може да имате нужда от такъв клас, когато започнете активно да изследвате многонишковостта в търсенето на Java Multithreading .

„Ще го запиша в паметта си, за да не го забравя. С надпис „за в бъдеще“.