Java. Урок 7. StringBuilder

  13 Январь 2013  Автор статьи: lordrp 

Продолжаем тему работы со строками. Как вы поняли из предыдущего урока, строка String является некой константой, и каждый раз вы просто заново создаете некую новую константу и кладете ее в свою переменную, таким образом следует понимать, что любое изменение в строках связано с использованием памяти под новую строку.

1
2
3
4
5
String s = "a";
for(int i = 0; i < 100; i++)
{
       s+='a';
}

Сей прекрасный код создаст 100 строк, которые будут хранится в памяти, пока сборщик мусора не удалит их. для того, поэтому, если вы напишите такой код в реальном проекте, то вам оторвут руки. Чтобы редактировать строки следует использовать класс обертку StringBuilder. Предыдущий пример можно переписать следующим образом:

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

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

1
2
3
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
 StringBuilder s = new StringBuilder("abcd");
 s.append('e');//abcde
 s.delete(1,2);//acde
 s.insert(1,'b');//abcde
 s.deleteCharAt(2);//abde
 String ans = s.toString();

Главная идея урока: «Если вы собираетесь часто изменять строку (например в цикле) то используйте класс — обертку StringBuilder». Если это ваш первый язык программирования, то вы скорей всего ничего не поняли из этого урока, не расстраивайтесь, переходите к следующим.

  • Дима

    «Если это ваш первый язык программирования, то вы скорей всего ничего не поняли из этого урока, не расстраивайтесь, переходите к следующим.»
    )))))))))))))

    • http://cybern.ru/ lordrp

      Ну все дело в том, что нужно было рассказать об этом именно после строк, а не потом.

  • Шаповалов Игорь

    Переход с 6-го урока на 7й не работает.

    • http://cybern.ru/ lordrp

      Починил.

  • Alex

    Здравствуйте! А что делает этот код?
    StringBuilder s = new StringBuilder(«a»);
    for(int i = 0; i < 100;i++) {
    s.append('a');
    }

    • http://cybern.ru/ lordrp

      я думаю, что в StringBuilder-е окажется строка из 101 буквы а=)

Научиться программировать