Назад Зміст Вперед

Клас StringBuffer

Об'єкти класу StringBuffer - це рядки змінної довжини. Тільки що створений об'єкт має буфер ви значеної ємності (capacity), по замовчуванню достатній для зберігання 16 символів. Ємність можна задати в конструкторі об'єкта. Як тільки буфер починає переповнюватися, його ємність автоматично збільшується, щоб вмістити нові символи. Також ємність буферу можна збільшити, звернувшись до методу ensureCapacity(int minCapacity)

Цей метод змінить ємність тільки якщо minCapacity буде більшим за довжину рядка, що зберігається в об'єкті. Ємність буде збільшена за таким правилом:
нехай ємність буферу рівна N. Тоді нова ємність буде рівна Мах(2 * N + 2, minCapacity). Таким чином, ємність буферу не можна збільшити менше ніж вдвічі.

Методом setLength(int newLength) можна встановити довільну довжину рядка. Якщо вона виявиться більше поточної довжини, то додаткові символи будуть рівні ' \u0000'. Якщо вона буде менше поточної довжини, то рядок буде обрізаний, останні символи втратяться, точніше, будуть замінені символом '\u0000'. Ємність при цьому не зміниться. Якщо число newLength виявиться від'ємним, виникне виключна ситуація.

!!! Будьте обережні, установлюючи нову довжину об'єкту. Кількість символів у рядку можна дізнатися, як і для об'єкту класу String, методом length (), а ємність — методом capacity (). Створити об'єкт класу StringBuffer можна тільки конструкторами.

1. Конструктори

В класі StringBuffer є три конструктори:
  1. stringBuffer () - створює пустий об'єкт з ємністю 16 символів;
  2. stringBuffer.(int capacity) - створює пустий об'єкт заданої ємності capacity;
  3. StringBuffer (String str) - створює об'єкт ємністю str.length() + 16, що містить рядок str.

2. Як додати підрядок

В класі StringBuffer є десять методів append (), що додають підрядок в кінець рядка. Вони не
створюють новий екземпляр рядка, а повертають посилання на той же самий, але змінений рядок.

  • Основний метод append (string str) приєднує рядок str в кінець даного рядка. Якщо посилка str == null, то додається рядок "null".
  • Шість методів append (type elem) додають примітивні типи boolean, char, int, long, float, double, перетворені в рядок.
  • Два методи приєднують до рядка масив str і підмасив sub символів, перетворені в рядок: append (char [] str) і append (char [.] , sub, int offset, int len).
  • Десятий метод додає просто об'єкт append (Object obj).

3. Як вставити підрядок

Десять методів insert () призначені для вставки рядка, вказаного параметром методу, в даний рядок. Місце вставки задається першим параметром методу ind. Це індекс елементу рядка, перед яким буде зроблена вставка. Він повинен бути невід'ємним і менше довжини рядка, інакше виникне виключна ситуація. Рядок розширюється, ємність буферу при необхідності збільшується. Методи повертають посилання на той же перетворений рядок.

  • Основний метод insert (int ind, string str) вставляє рядок str в даний рядок перед його символом з індексом іnd. Якщо посилання str == null вставляється рядок "null".  Наприклад, після виконання String s = new StringBuffer("Це великий рядок"). insert(3, "не").toString(); отримаємо s == "Це невеликий рядок".
  • Метод sb.insert(sb.length о, "xxx") буде працювати так як і метод sb.append("xxx").
  • Шість методів insert (int ind, type elem) вставляють примітивні типи boolean, char, int, long, float, double, перетворені в рядок. 
  • Два методи вставляють масив str і підмасив sub символів, перетворені в рядок:
insert(int ind, chart] str)
insert(int ind, char[] sub, int offset, int len)

  • Десятий метод вставляє просто об'єкт:
insert(int ind, Object obj)
Об'єкт obj перед додаванням перетворюється в рядок своїм методом toString().

4. Як видалити підрядок

Метод delete(int begin, int end) видаляє із рядка символи, починаючи з індексу begin включно до індексу end виключно, якщо end більше за довжину рядка, то до кінця рядка.
Наприклад, після виконання String s = new StringBuffer("Це невеликий рядок").
delete(3, 5).toString(); отримаємо s == "Це великий рядок". Якщо begin від'ємне, більше за довжину рядка або більше end, виникає виключна ситуація. Якщо begin == end, видалення не відбувається.

5. Як видалити символ

Метод deІeteCharAt (int ind) видаляє символ з указаним індексом ind. Довжина рядка зменшується на одиницю. Якщо індекс ind від'ємний або більший за довжину рядка, виникає виключна ситуація.

6. Як замінити підрядок

Метод replace (int begin, int end, String str) видаляє символи із рядка, починаюси з індексу begin включно до індексу end виключно, якщо end більше за довжину рядка, то до кінця рядка, і вставляє замість них рядок str. Якщо begin від'ємне, більше за довжину рядка або більше end, виникає виключна ситуація.

7. Як перевернути рядок

Метод reverse() змінює порядок розташування символів у рядку на зворотний порядок.
Наприклад, після виконання StringBuffer s = new StringBuffer("Це невеликий рядок"),
reverse().toString(); отримаємоs == "кодяр йикилевен еЦ".

8. Синтаксичний розбір рядка

В пакет java.util входить простий клас StringTokenizer, що полегшує розбір рядків. Клас StringTokenizer невеликий, в ньому три конструктори і шість методів. 


.