„Поздрави, амиго!“
„Здравей, Риши!“
„Вече знаете достатъчно за низовете, за да научите нещо интересно. По-конкретно, нов клас, който е подобен, но не съвсем същия като класа 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
Класът има две дузини полезни методи. Ето най-важните:
Метод | Описание |
---|---|
|
Преобразува подавания обект в низ и го добавя към текущия низ |
|
Преобразува подавания обект в низ и вмъква в средата на текущия низ |
|
Заменя частта от низа, указана от интервала start..end, с подаден низ |
|
Премахва знака с посочения индекс от низа |
|
Премахва символи в посочения интервал от низа |
|
Търси подниз в текущия низ |
|
Търси подниз в текущия низ, започвайки от края |
|
Връща знака в низа при подаден индекс |
|
Връща подниза, дефиниран от посочения интервал |
|
Обръща текущия низ. |
|
Променя знака при посочения индекс на предадения знак |
|
Връща дължината на низа в знаци |
„А сега ще ви опиша накратко всеки от тези методи.
Добавяне към низ
„За да добавите нещо към променлив низ ( StringBuilder
), използвайте append()
метода. Пример:
Код | Описание |
---|---|
|
Hi |
Преобразуване в standardн низ
„За да конвертирате StringBuilder
обект в String обект, просто трябва да извикате неговия toString()
метод. Пример
Код | Изход |
---|---|
|
Hi123 |
Как да изтрия знак?
„За да изтриете символ в променлив низ, трябва да използвате deleteCharAt()
метода. Пример:
Код | Изход |
---|---|
|
Helo |
Как да заменя част от низ с друг низ?
„За това има replace(int begin, int end, String str)
метод. Пример:
Код | Изход |
---|---|
|
MeHello!w |
„Звучи удобно. Благодаря ти, Риши.“
„Не го споменавайте. Какво ще кажете за това, можете ли да обърнете струна назад? Как бихте го направor?“
„Ами... Бих създал StringBuilder
, сложил низ в него... След това създал нов низ и в цикъл от последния знак към първия... Или може би побитово изместване...
„Не е зле. Но може да бъде по-бързо. Има специален метод за това — reverse();
Пример:
Код | Изход |
---|---|
|
olleH |
"Освен StringBuilder
класа, Java има друг клас, подобен на низ, наречен StringBuffer
. Той е аналог на StringBuilder
класа, но неговите методи са маркирани с synchronized
модификатора."
"Какво означава това?"
„Това означава, че StringBuffer
обектът може да бъде достъпен едновременно от множество нишки.“
„Все още не съм много запознат с нишките. Но „може да бъде достъпен от множество нишки“ е очевидно по-добре от „не може да бъде достъпен от множество нишки“... Защо тогава да не използвате винаги? StringBuffer
“
„Тъй като е много по-бавен от StringBuilder
. Може да имате нужда от такъв клас, когато започнете активно да изследвате многонишковостта в търсенето на Java Multithreading .
„Ще го запиша в паметта си, за да не го забравя. С надпис „за в бъдеще“.