Учим Java. Работа со строками. Окончание. Продолжая разговор об средствах Java для обработки символьной информации нельзя обделить в - davaiknam.ru o_O
Главная
Поиск по ключевым словам:
страница 1
Похожие работы
Название работы Кол-во страниц Размер
Создание диалектов языков программирования с инспользованием грамматических... 1 26.38kb.
CloudScape. Любой разработчик, занимающийся разработкой приложений... 1 142.01kb.
Еженедельный обзор заработных плат 12 июля 2011 г. Позиция: Java... 1 34.02kb.
Huawei U1280 Обзор продукта 1 90.88kb.
1 Дополнение созданной модели процессов организационными диаграмма­ми... 1 324.66kb.
Основы программирования на языке Java (для начинающих) План занятий 1 28.33kb.
Java разработчика 1 21.8kb.
Как создать Java-игру для мобильного телефона 1 175.03kb.
Программа курса для направления 230200. 68 «Информационные системы. 1 97.14kb.
Решение для языка Groovy 6 Использование в языке Java 7 Структура... 1 82.9kb.
Сравнение языков программирования C, C++, Pascal, Ada, Modula-2,... 4 520.15kb.
Отчет о деятельности банка в системах платежей посредством банковских... 1 157.41kb.
Направления изучения представлений о справедливости 1 202.17kb.

Учим Java. Работа со строками. Окончание. Продолжая разговор об средствах Java для - страница №1/1

Учим Java. Работа со строками. Окончание.
Продолжая разговор об средствах Java для обработки символьной информации нельзя обделить вниманием такие классы как StringBuffer и StringTokenizer. Первый представляет собой строку, которую можно изменять, в отличие от String. Второй предоставляет возможность разбора строк. В этой статье мы поговорим об основных методах этих классов, а также о том, как и где их можно применять.
Итак, класс StringBuffer. Рассмотрим два его конструктора:
StringBuffer()

Этот не принимает никаких параметров и просто создает объект класса StringBuffer.
StringBuffer(String s)

Этот принимает ссылку на объект класса String и создает экземпляр StringBuffer на основе этой строки.
Создадим какую-нибудь ссылку на объект класса StringBuffer:
String s = "this is text";

StringBuffer sb = new StringBuffer(s);
Далее по очередности рассмотрим методы класса StringBuffer. Начнем с методов для изменения содержимого буфера, т.е. с основной особенности этого класса.
setCharAt(int i, char ch)

Измениет символ с индексом i на символ ch.
setLength(int length)

Этот метод укорачивает буфер StringBuffer до заданной длины. Здесь значение переменной length должно быть меньше длины буфера.
append(...)

Добавляет в конец буфера строку. Т.е. преобразует объект в строку и добавляет полученное значение в конец заданного буфера. Вот список типов, которые можно использовать: Object, String, char[], boolean, char, int, long, float, double.
insert(...)

В отличие от append() может добавлять строку в любое место заданного буфера, иными словами вставлять подстроку в буфер. Список используемых типов смотри выше.
reverse()

Реверсирует заданную строку. Т.е. перестраивает порядок следования символов в строке на обратный. Очень полезный метод.
delete(int begin, int end)

Удаляет последовательность символов из буфера начиная с позиции begin, заканчивая позицией end.
deleteCharAt(int i)

Удаляет символ из буфера в позиции i.
StringBuffer replace(int start, int end, String s)

Заменяет в строке символы от start до end на строку s. Размер буфера изменяется в соответствии с размером сроки s. Если ее длина больше количества символов в интервале start - end, то тогда буфер увеличивается в длине, если меньше - укорачивается. Результат-буфер, возвращается методом.
StringBuffer insert(int i, char[] chars, int start, int count)

Иная версия обычного insert(...). Этот вариант insert() вставляет в буфер count символов массива символов chars, начиная с позиции start в массиве, после элемента с номером i в буфере. Резултат будет возвращен методом.
Теперь немного о способах преобразования экземпляров класса StringBuffer. Для того, чтобы из StringBuffer получить строку, можно воспользоваться уже известным вам методом toString(). Или же передать экземпляр буфера в качестве параметра конструктору String. Если возникла необходимость преобразовать StringBuffer в массив символов (char[]), то можно обойтись методом getChars():
getChars(int sb, int se, char[] ds, int dsb)

Символы из буфера в диапозоне sb и se копируются в массив ds начиная с позиции dsb в массиве. Последний символ с номером se не учитывается и скопирован не будет.
Очень часто может понадобиться ограничить размер буфера. По умолчанию вы можете вставлять данные в буфер пока не исчерпаете все доступные ресурсы. А это не всегда допустимо, особенно когда StringBuffer заполняется из ненадежного источника: поток, файл и т.д. Поэтому, чтобы установить максимальный размер буфера введен специальный конструктор:
StringBuffer(int limit)

limit - ввместимость буфера.
На последок посмотрим на два метода для работы с ограничением на размер буфера:
int capacity()

Возвращает текущее значение емкости буфера. Емкость - это и есть максимальный размер буфера.
void ensureCapacity(int i)

Изменяет значение вместимости буфера на i.
На этом обзор класса StringBuffer можно завершить. Подводя итог, еще раз скажу что StringBuffer предназначен для промежуточных операций над строками; операции над которым не требуют создания промежуточных экземпляров класса, как String например, и вполне могут изменять содержимое буфера. Также класс StringBuffer может без особых трудностей преобразован как в String, так и в массив символов.
Следующий класс из сегодняшнего обзора - StringTokenizer. Как уже было сказано в введении, он позволяет разбивать на части строки по заданным delimiters(разделители). Он сильно напоминает класс StreamTokenizer. Они оба выполняют фактически одни и те же функции, только StreamTokenizer работает и разбирает потоки, а StringTokenizer - строки.
Для начала конструктор:
StringTokenizer(String s, String delimiters)

Первый параметр s задает строку, которую предстоит анализировать, а второй (delimiters) - список разделителей.
StringTokenizer(String s, String delimiters, boolean returnTokens)

Аналогично предыдущему. returnTokens определяет возвращать ли разделители вместе с лексемами? Если true - то будут возвращены все присутствующие в строке разелители вместе с тем, что стоит между ними(лексемы).
StringTokenizer(String s)

Тоже, когда returnTokens = false, а delimiters = " \t\n\f\r".
Методы:
boolean hasMoreTokens()

Возвращает true, если может быть возвращена еще хотя бы одна лексема.
String nextToken()

Возвращает очередную лексему. Повторно вернуть ее не удастся без повторного создания StringTokenizer, поэтому если предстоит использовать это значение многократно, то его следует сохранить в какой-нибудь переменной. Если в очереди нет больше лексем, то выбрасывается исключение NoSuckElementException.
String nextToken(String delimiters)

Тоже что и предыдущее, только с установкой нового набора разделителей. Если в очереди нет больше лексем, то выбрасывается исключение NoSuckElementException.
int countTokens()

Возвращает количество лексем, которые находятся в очереди на возвращение методом nextToken().
Вот почти весь StringTokenizer. Ничего сложно здесь нет. Для примера давайте разберем введенную с клавиатуры строку, состоящую из пары "параметр = значение" и выведем на экран "параметр -> значение".
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String s = br.readLine().trim();

StringTokenizer st = new StringTokenizer(s, "=");

if (st.countTokens() >= 2) {

System.out.println(st.nextToken().trim() + " -> " + st.nextToken().trim());

}
Вот и весь разбор.
Наш обзор методов работы со строками подошел к своему завершению. Надеюсь он оказался кому-то полезным. Работа со строками в Java представлена очень гибкими средствами-классами, возможности которых должен знать каждый, кто программирует на Java. Жду ваших писем.
Алексей Литвинюк (c)

litvinuke@tut.by

www.litvinuke.hut.ru




Человек, которому повезло, — это человек, который делал то, что другие только собирались сделать. Жюль Ренар
ещё >>