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

Глава 8 строки

Что толку в хорошей цитате, если ее нельзя изменить? Доктор Who, The Two Doctors

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

8.1. Основные операции со строками

Класс String позволяет работать со строками, доступными только для чтения, и поддерживает операции с ними. Строки могут создаваться неявным образом при помощи заключенной в кавычки последовательности символов (например, “GrцЯe”) или за счет выполнения оператора + или += над двумя объектами String.

Кроме того, допускается и явное построение объектов String оператором new. В классе String предусмотрены следующие конструкторы:

public String()

Конструирует новый объект String, значение которого равно “”.

public String(String value)

Конструирует новый объект String, являющийся копией заданного.

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

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

counts[str.charAt(i)]++;

ПрипопыткеобратитьсявметодеcharAtилилюбомдругомметодеStringкпозиции,номеркоторойотрицателенлибопревышаетlength()-1,возбуждаетсяисключениеIndexOutOfBoundsException.Подобные неверные обращения обычно обусловлены наличием ошибок в программе.

Кроме того, имеются простые методы для поиска в строке первого или последнего вхождения конкретного символа или подстроки. Следующий метод возвращает количество символов между первым и последним вхождением заданного символа в строке:

static int countBetween(String str, char ch) {

int begPos = str.indexOf(ch);

if (begPos << 0) // не входит

return -1;

int endPos = str.lastIndexOf(ch);

return endPos - begPos - 1;

}

Данный метод находит первую и последнюю позицию символа ch в строке str. Если символ входит в строку менее двух раз, метод возвращает –1. Разность между номерами позиций превышает на единицу количество символов между ними (количество символов между позициями 2 и 3 равно 0).

Существует несколько перегруженных вариантов метода indexOf для поиска в прямом направлении и метода lastIndexOf— для поиска в обратном направлении. Каждый из методов возвращает номер найденной позиции или –1, если поиск оказался безуспешным:

Метод

Возвращаемое значение

indexOf(char ch)

первая позиция ch

indexOf(char ch, int start)

первая позиция ch  start

indexOf(String str)

первая позиция str

indexOf(String str, int start)

первая позиция str  start

lastIndexOf(char ch)

последняя позиция ch

lastIndexOf(char ch, int start)

последняя позиция ch start

lastIndexOf(String str)

последняя позиция str

lastIndexOf(String str, int start)

последняя позиция str start

Упражнение 8.1

Напишите метод, который подсчитывает количество вхождений данного символа в строку.

Упражнение 8.2

Напишите метод, который подсчитывает количество вхождений некоторой подстроки в данную строку.

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