Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GoslingJava2.doc
Скачиваний:
139
Добавлен:
23.02.2016
Размер:
2.39 Mб
Скачать

8.8.1. Модификация буфера

Существует несколько возможностей изменить содержимое буфера объекта StringBuffer, в том числе добавить новые символы в его конец или вставить их в середину. Самый простой из таких методов называется setCharAt и служить для замены символа в конкретной позиции. Также имеется метод replace, который делает то же самое, что и String.replace, однако работает с объектом StringBuffer. Метод replace не нуждается в создании нового объекта для хранения результата, поэтому несколько последовательных вызовов replace могут выполняться с одним буфером:

public static void

replace(StringBuffer str, char from, char to)

{

for (int i = 0; i << str.length(); i++)

if (str.charAt(i) == from)

str.setCharAt(i, to);

}

МетодsetLengthобрезаетилирасширяетстроку,хранящуюсявбуфере.Если передать setLength величину, меньшую длины текущей строки, то строка будет обрезана до указанного значения. Если же передаваемая длина превышает текущую, то строка расширяется, а новые позиции заполняются нуль-символами (\u0000).

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

Object String char[]

boolean char int int

long float double

Также существуют методы append и insert, которым в качестве аргумента передается часть массива char. Например, для создания объекта String Buffer с описанием квадратного корня из целого числа можно написать следующее:

String sqrtInt(int i) {

StringBuffer buf = new StringBuffer();

buf.append("sqrt(").append(i).append(')');

buf.append(" = ").append(Math.sqrt(i));

return buf.toString();

}

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

Метод insert получает два параметра. Первый из них— позиция, начиная с которой в StringBuffer будут вставляться новые символы. Второй параметр— вставляемое значение, при необходимости преобразованное в String. Приведем метод, который вставляет добавляет дату в начало буфера:

public static StringBuffer addDate(StringBuffer buf) {

String now = new java.util.Date().toString();

buf.ensureCapacity(buf.length() + now.length() + 2);

buf.insert(0, now).insert(now.length(), ": ");

return buf;

}

Все начинается с создания строки, содержащей текущую дату. Для этой цели используется класс java.util.Date; его конструктор по умолчанию создает объект, представляющий текущее время на момент создания. Далее необходимо убедиться, что размеров буфера хватит для хранения всех добавляемых символов— увеличение буфера должно происходить только один раз, а не после каждого вызова insert. Затем в буфер вставляется строка с текущим временем, за которой следует простейшая строка-разделитель. Наконец, переданный буфер возвращается обратно, чтобы при вызове данного метода можно было осуществить что-нибудь наподобие той конкатенации, которая пригодилась при работе с собственными методами StringBuffer.

Метод reverse изменяет порядок следования символов в StringBuffer. Например, если буфер содержит строку “good”, то после выполнения reverse в нем окажется строка “doog”.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]