Программирование на Java

       

StringBuffer


Этот класс используется для создания и модификации строковых выражений, которые после можно превратить в String. Он реализован на основе массива char[], что позволяет, в отличие от String, модифицировать его значение после создания объекта.

Рассмотрим наиболее часто используемые конструкторы класса StringBuffer:

  • StringBuffer() – создает пустой StringBuffer;

  • StringBuffer(String s) – буфер заполняется указанным значением s;

  • StringBuffer(int capacity) – создает экземпляр класса StringBuffer с указанным размером (длина char[]). Задание размера не означает, что нельзя будет оперировать строками с большей длинной, чем указано в конструкторе. На самом деле этим гарантируется, что при работе со строками меньшей длины дополнительное выделение памяти не потребуется.

Разница между String и StringBuffer может быть продемонстрирована на следующем примере:

public class Test { public static void main(String[] args) { Test t = new Test(); String s = new String("ssssss"); StringBuffer sb = new StringBuffer("bbbbbb"); s.concat("-aaa"); sb.append("-aaa"); System.out.println(s); System.out.println(sb); } }

В результате на экран будет выведено следующее:

ssssss bbbbbb-aaa

В данном примере можно заметить, что объект String остался неизменным, а объект StringBuffer изменился.

Основные методы, используемые для модификации StringBuffer, это:

  • public StringBuffer append(String str) – добавляет переданную строку str в буфер;

  • public StringBuffer insert(int offset, String str) – вставка строки, начиная с позиции offset (пропустив offset символов).

Стоит обратить внимание, что оба метода имеют варианты, принимающие в качестве параметров различные примитивные типы Java вместо String. При использовании этих методов аргумент предварительно приводится к строке (с помощью String.valueOf()).

Еще один важный момент, связанный с этими методами, – они возвращают сам объект, у которого вызываются. Благодаря этому, возможно их использование в цепочке. Например:


public static void main(String[] args) { StringBuffer sb = new StringBuffer("abc"); String str = sb.append("e").insert(4, "f").insert(3,"d").toString(); System.out.println(str); }

В результате на экран будет выведено:

abcdef

При передаче экземпляра класса StringBuffer в качестве параметра метода следует помнить, что этот класс изменяемый:

public class Test { public static void main(String[] args) { Test t = new Test(); StringBuffer sb = new StringBuffer("aaa"); System.out.println("Before = " + sb); t.doTest(sb); System.out.println("After = " + sb); } void doTest(StringBuffer theSb){ theSb.append("-bbb"); } }

В результате на экран будет выведено следующее:

Before = aaa After = aaa-bbb

Поскольку все объекты передаются по ссылке, в методе doTest, при выполнении операций с theSB, будет модифицирован объект, на который ссылается sb.


Содержание раздела