Основное отличие String от StringBuffer состоит в том, что при модификации строки StringBuffer, в отличии от String, не создает новый экземпляр объекта, а модифицирует сам объект. Объект класса StringBuffer представляет собой буфер, содержащий строку. Кроме длины строки, он имеет еще и размер буфера, который, как правило, несколько больше самой длины строки. Создать StringBuffer можно из строки String, а так же пустой StringBuffer и StringBuffer заданного размера. Длину строки можно получить методом length(), размер буфера capacity(). Класс StringBuilder появился в 5 версии Java и он во всем идентичен классу StringBuffer, за исключением того, что он не является потоково-безопасным, что делает его значительно шустрее. Но цена скорости - небезопасное поведение при написании программ, в которых существует несколько потоков для обработки данных. Рассмотрим на примере методы работы со StringBuffer:
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer(); // резеривирует буфер из 16 символов
StringBuffer s2 = new StringBuffer(50); // устанавливает размер буфера 50 симв.
StringBuffer s = new StringBuffer("Привет"); // устанавливает содержимое плюс еще 16 буфер
System. out. println("Длина объекта: " + s.length());
System. out. println("Общий объем памяти: " + s.capacity());
int index = s.indexOf("р");
s.setCharAt(index, 'л'); // устанавливает символ 'л' на позицию index
System. out. println(s);
System. out. println(s.charAt(0)); // получает символ позиции 0
s.append(" мир!"); // добавить в конец строки дополнительно " мир!"
System. out. println(s);
System. out. println(s.reverse()); // меняет порядок символов
s.deleteCharAt(0); // удаляет символ с позиции 0
System. out. println(s);
s.delete(0, 5); // удаляет символы с 0 по 4 включительно
System. out. println(s);
s.delete(0, s.length()); // очистим строку
s.append("Это - тест");
System. out. println(s);
s.replace(4, 5, "был"); // заменяет набор символо с 4 по 5 (5 невключительно) словом "был"
System. out. println(s);
s.insert(7, " хороший"); // вставляет на позицию 7 подстроку " хороший"
System. out. println(s);
System. out. println(s.substring(0, 3)); // возвращает часть строки с 0 по 3 (3 невключительно) символ
System. out. println(s);
}
Вывод в консоль:
Длина объекта: 6
Общий объем памяти: 22
Пливет
П
Пливет мир!
!рим тевилП
рим тевилП
евилП
Это - тест
Это был тест
Это был хороший тест
Это
Это был хороший тест