Классы StringBuilder и StringBuffer




Классы StringBuilder и StringBuffer являются “близнецами” и по своему предназначению близки к классу String, но, в отличие от последнего, содержимое и размеры объектов классов StringBuilder и StringBuffer можно изменять.

Основным и единственным отличием StringBuilder от StringBuffer является потокобезопасность последнего. В версии 1.5.0 был добавлен непотокобезопасный (следовательно, более быстрый в обработке) класс StringBui lder, который следует применять, если не существует вероятности использования объекта в конкурирующих потоках.

С помощью соответствующих методов и конструкторов объекты классов StringBuffer, StringBuilder и Strin g можно преобразовывать друг в друга. Конструктор класса StringBuffer (также как и StringBuilder) может принимать в качестве параметра объект String или неотрицательный размер буфера.

Следует обратить внимание на следующие методы:

void setLength(int n) – установка размера буфера;

void ensureCapacity(int minimum) – установка гарантированного минимального размера буфера;

int capacity() – возвращение текущего размера буфера;

StringBuffer append(параметры) – добавление к содержимому объекта строкового представления аргумента, который может быть символом, значением базового типа, массивом и строкой;

StringBuffer insert(параметры) – вставка символа, объекта или строки в указанную позицию;

StringBuffer deleteCharAt(int index) – удаление символа;

StringBuffer delete(int start, int end) – удаление подстроки;

StringBuffer reverse() – обращение содержимого объекта.

В классе присутствуют также методы, аналогичные методам класса String, такие как replace(), substring(), charAt(), length(), getChars(), indexOf() и др.

При создании объекта StringBuffe r конструктор по умолчанию автоматически резервирует некоторый объем памяти (16 символов), что в дальнейшем позволяет быстро менять содержимое объекта, оставаясь в границах участка памяти, выделенного под объект. Размер резервируемой памяти при необходимости можно указывать в конструкторе

Если метод, вызываемый объектом StringBuffer, производит изменения в его содержимом, то это не приводит к созданию нового объекта, как в случае объекта String, а изменяет текущий объект StringBuffer.

 

Форматирование строк.

Для создания форматированного текстового вывода предназначен классjava.util.Formatter. Этот класс обеспечивает преобразование формата, позволяющее выводить числа, строки, время и даты в любом необходимом разработчику виде.

В классе Formatte r объявлен метод format(), который преобразует переданные в него параметры в строку заданного формата и сохраняет в объекте типа Formatter.

Класс Formatter преобразует двоичную форму представления данных в форматированный текст. Он сохраняет форматированный текст в буфере, содержимое которого можно получить в любой момент. Можно предоставить классу Formatter автоматическую поддержку этого буфера либо задать его явно при создании объекта. Существует возможность сохранения буфера класса Formatter в файле.

Для создания объекта класса существует более десяти конструкторов. Ниже приведены наиболее употребляемые:

Formatter()

Formatter(Appendable buf) - В приведенных образцах buf задает буфер для форматированного вывода.

Formatter(Appendable buf, Locale loc) - Параметр loc определяет региональные и языковые настройки.

Formatter(String filename) throws FileNotFoundException - Параметр filenameзадает имя файла, который получит форматированный вывод.

Formatter(String filename, String charset) - Параметр charset определяет кодировку. Если она не задана, используется кодировка, установленная по умолчанию

Formatter(File outF) throws FileNotFoundException - Параметр outF передает ссылку на открытый файл, в котором будет храниться форматированный вывод.

Formatter(OutStream outStrm)- В параметре outStrm передается ссылка на поток вывода, который будет получать отформатированные данные.

В классе объявлены следующие методы:

Formatter format(String fmtString, Object...args) – форматирует аргументы, переданные в аргументе переменной длины args (количество аргументов в списке вывода не фиксировано), в соответствии со спецификаторами формата, содержащимися в fmtString. Возвращает вызывающий объект;

Formatter format(Locale loc, String fmtString, Object...args) – форматирует аргументы, переданные в аргументе переменной длины args, в соответствии со спецификаторами формата, содержащимися в fmtString. При форматировании используются региональные установки, заданные в lос. Возвращает вызывающий объект;

IOException ioException() – если объект, приемник отформатированного вывода, генерирует исключение типа IOException, возвращает это исключение. В противном случае возвращает null;

Locale locale() – возвращает региональные установки вызывающего объекта;

Appendable out() – возвращает ссылку на базовый объект-приемник для выходных данных;

void flush() – переносит информацию из буфера форматирования и производит запись в указанное место выходных данных, находящихся в буфере. Метод чаще всего используется объектом класса Formatter, связанным с файлом;

void close() – закрывает вызывающий объект класса Formatter, что приводит к освобождению ресурсов, используемых объектом. После закрытия объекта типа Formatter он не может использоваться повторно. Попытка использовать закрытый объект приводит к генерации исключения типа

FormatterClosedEception;

String toString() – возвращает объект типа String, содержащий отформатированный вывод.

У класса Formatter есть полезное свойство, которое позволяет задавать аргумент, к которому следует применить конкретный спецификатор формата. По умолчанию соответствие между спецификаторами и аргументами, на которые они воздействуют, устанавливается в соответствии с порядком их следования, слева направо. Это означает, что первый спецификатор формата соответствует первому аргументу, второй спецификатор – второму аргументу и т. д. Однако, используя порядковый номер или индекс аргумента, можно указать явное соответствие спецификатора формата аргументу

 

Регулярные выражения.

Класс java.util.regex.Pattern применяется для определения регулярных выражений (шаблонов), для которых ищется соответствие в строке, файле или другом объекте, представляющем последовательность символов. Для определения шаблона применяются специальные синтаксические конструкции. О каждом соответствии можно получить информацию с помощью класса java.util.regex.Matcher.

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

[abc] - a, b или c

[^abc] - символ, исключая a, b и c

[a-z]- символ между a и z

[a-d[m-p]]-между a и d, либо между m и p

[e-z&&[dem]]-e либо m (конъюнкция)

ab - после a следует b; a|b -a либо b

Класс Pattern используется для простой обработки строк. Для более сложной обработки строк используется класс Matcher, рассматриваемый ниже.

Pattern compile(String regex) – возвращает Pattern, который соответствует regex.

Matcher matcher(CharSequence input) – возвращает Matcher, с помощью которого можно находить соответствия в строке input.

boolean matches(String regex, CharSequence input) – проверяет на соответствие строки input шаблону regex.

String pattern() – возвращает строку, соответствующую шаблону.

String[] split(CharSequence input) – разбивает строку input, учитывая, что разделителем является шаблон.

String[] split(CharSequence input, int limit) – разбивает строку input на не более чем limit частей.

Начальное состояние объекта типа Matcher не определено. Попытка вызвать какой-либо метод класса для извлечения информации о найденном соответствии приведет к возникновению ошибки IllegalStateException. Для того чтобы начать работу с объектом Matcher, нужно вызвать один из его методов:

boolean matches() – проверяет, соответствует ли вся строка шаблону;

boolean lookingAt() – пытается найти последовательность символов, начинающуюся с начала строки и соответствующую шаблону;

boolean find() или boolean find(int start) – пытается найти последовательность символов, соответствующих шаблону, в любом месте строки. Параметр start указывает на начальную позицию поиска.

Matcher useAnchoringBounds(boolean b) – если установлен в true, то начало и конец региона соответствуют символам ^ и $ соответственно.

int end() – возвращает индекс последнего символа подпоследовательности, удовлетворяющей шаблону;

int end(int group) – возвращает индекс последнего символа указанной группы;

String group() – возвращает всю подпоследовательность, удовлетворяющую шаблону;

String group(int group) – возвращает конкретную группу;

int groupCount() – возвращает количество групп;

int start() – возвращает индекс первого символа подпоследовательности, удовлетворяющей шаблону;

int start(int group) – возвращает индекс первого символа указанной группы;

boolean hitEnd() – возвращает истину, если был достигнут конец входной последовательности.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: