четвер, 19 липня 2012 р.

Рядки символів. Клас StringBuffer.

В Паскалі та Бейсіку  існує багато інших зручних функцій, але на першому етапі їх можна обійти використавши декілька разів функцію substring . Виявляється в Java також є такі функції, які знаходяться в класі StringBuilder.


Основна відмінність String від StringBuffer полягає в тому, що при модифікації рядка StringBuffer, на відміну від String, не створює новий екземпляр об'єкта, а модифікує сам об'єкт. Об'єкт класу StringBuffer являє собою буфер, що містить рядок. Крім довжини рядка, він має ще і розмір буфера, який, як правило, трохи більше самої довжини рядка. Створити StringBuffer можна з рядка String, а так само порожній StringBuffer і StringBuffer заданого розміру. Довжину рядка можна отримати методом length(), розмір буфера capacity(). За допомогою методу charAt можна отримати будь-який символ рядка.

Давайте продемонструємо це на прикладі:


StringBuilder s = new StringBuilder("a");
for(int i = 0; i < 100;i++)   {    
      s.append('a');
}

Конструктор StringBuilder може приймати на вход рядок, з яким можна проводить подальші дії. Крім методів, які дозволяют добавити в конец рядка різні типи даних (append) він також вміє видаляти і вставляти символи в рядки:

s.deleteCharAt(i);//видаляє символ в позиціі i
s.delete(i, j);// видаляє  пірядок з i - го по j - ий символ
s.insert(i,j);//вставляет на i - ое место объект j
Для того, щоб вернись від StringBuilder до String необхідно викликати метод toString();
1
2
3
4
5
6
7
 StringBuilder s = new StringBuilder("abcd");
 s.append('e');//abcde
 s.delete(1,2);//acde
 s.insert(1,'b');//abcde
 s.deleteCharAt(2);//abde
 int len = s.length();
 int cap = s.capacity();
 String ans = s.toString();

Главная идея урока: "Если вы собираетесь часто изменять строку (например в цикле) то используйте класс - обертку StringBuilder".


Немає коментарів:

Дописати коментар