Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория экзамен.doc
Скачиваний:
25
Добавлен:
29.05.2015
Размер:
516.61 Кб
Скачать

21. Класс StringBuffer

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

public static String guillemete(string quote) {

return ‘«’ + quote + ‘»’;

}

Если бы компилятор был ограничен возможностью использования только тех объектов, которые относятся к классу String, выполняемые им операции можно было бы описать такой схемой:

quoted = String.valueOf(‘«’).concat(quote)

.concat(string.valueOf(‘»’));

При Каждом вызове valueOf и concat создается новый объект String, так что в Процессе вычисления рассматриваемого выражения системе пришлось бы построить четыре объекта String, только один из которых пригодился бы в дальнейшем, и понести при этом неоправданно большие накладные расходы, связанные с созданием, инициализацией и утилизацией дополнительных объектов.

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

quoted= new StringBuffer().append(‘«’) appendCquote).append(‘»’).toString();

 

В процессе вычисления выражения компилятор создает единственный объект StringBuffer для хранения всей последовательности символов, инициализирует его посредством нескольких функций append, а затем с помощью метода tostring преобразует Окончательный результат в объект типа String.

Для построения и изменения строк вы вправе воспользоваться средствами Класса StringBuffer непосредственно. В его составе есть несколько конструкторов, описанных ниже.

public StringBuffer()

Создает новый объект StringBuffer со значением "" – пустую строку.

public StringBuffer(String str)

Создает новый объект StringBuffer, содержащий ту же строку, что и объект-параметр stг.

Класс StringBuffer во многом подобен Классу String он поддерживает ряд одноименных методов с теми же контрактами. Однако StringBuffer не является производным от String, поэтому обратное предположение также неверно. Эти классы совершенно независимы – они оба наследуют класс Object.

22. Методы StringBuffer

23. Класс StringTokenizer и его методы

Определение этого класса достаточно компактно.

  • Конструкторы

public StringTokenizer(String str);

public StringTokenizer(String str,

String delim);

public StringTokenizer(String str,

String delim,

boolean returnTokens);

  • Методы

public String nextToken();

public String nextToken

(String delim);

public int countTokenss();

public boolean hasMoreElements();

public boolean hasMoreTokenss();

public Object nextElement();

}

Класс StringTokenizer не имеет никакого отношения к потокам, так как предназначен для выделения отдельных элементов из строк типа String.

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

Рассмотрим кратко методы класса StringTokenizer.

Для разбора строки приложение должно организовать цикл, вызывая в нем метод nextToken. Условием завершения цикла может быть либо возникновение исключения NoSuchElementException, либо возврат значения false методами hasMoreElements или hasMoreTokens.

Метод countTokens позволяет определить, сколько раз был вызван метод nextToken перед возникновением исключения NoSuchElementException.