Важным моментом является поиск замена в строках.

Есть методы, позволяющие проверить, с чего начинается и чем заканчивается строка:

String greeting = "Hello, World";

if( greeting. startsWith( "Hello" ) ) {

System. out. println( "String starts with Hello" );

}

if( greeting. endsWith( "World" ) ) {

System. out. println( "String ends with World" );

}

В классе String также есть методы для извлечения отдельных частей строки:

String action = "Feed the baby";

System. out. println( bstring( 5 ) ); // Выводит "the baby"

System. out. println( bstring( 5, 8 ) ); // Выводит "the"

Отметим, что первый индекс указывает на символ, извлекаемый из строки, а последний символ, на который указывает второй индекс, не извлекается из строки.

Есть методы для изменения строки:

String greeting = "Hello, World";

System. out. println( greeting ); // "Hello, World"

System. out. println( greeting. toLowerCase() ); // "hello, world"

System. out. println( greeting. toUpperCase() ); // "HELLO, WORLD"

Имеются также методы для определения, где в строке находится подстрока:

String number = "one two one three one four";

// Выводит "0"

System. out. println( "First index of 'one': " + number. indexOf( "one" ) );

// Выводит "8"; ищет "one", начиная с индекса 1

System. out. println( "Next index of 'one': " + number. indexOf( "one", 1 ) );

НЕ нашли? Не то? Что вы ищете?

// Выводит "18"; ищет "one" с конца строки в обратном порядке

System. out. println( "Next index of 'one': " + number. lastIndexOf( "one" ) );

Более полную информацию о классе String можно получить в документации по Java.

Класс StringBuffer

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

Объекты класса StringBuffer могут быть сконструированы пустыми, или пустыми, но с резервированием определенного начального размера, или из существующей строки (см. Табл. 10.19).

Табл. 10.19. Методы класса StringBuffer

Meтод

Описание

StringBuffer append(boolean b)

Добавляет строковое представление булевской переменной к StringBuffer.

StringBuffer append(char c)

Добавляет строковое представление char переменной к StringBuffer.

StringBuffer append(char[] str)

Добавляет строковое представление массива char переменной к StringBuffer.

StringBuffer append(char[] str, int offset, int len)

Добавляет строковое представление подмассива char к StringBuffer.

StringBuffer append(double d)

Добавляет строковое представление double переменной к StringBuffer.

StringBuffer append(float f)

Добавляет строковое представление float переменной к StringBuffer.

StringBuffer append(int i)

Добавляет строковое представление int переменной к StringBuffer.

StringBuffer append(long l)

Добавляет строковое представление long переменной к StringBuffer.

StringBuffer append(Object obj)

Добавляет строковое представление любого объекта к StringBuffer.

StringBuffer append(String str)

Добавляет строковое представление строки String к StringBuffer.

int capacity()

Возвращает текущую емкость StringBuffer.

char charAt(int index)

Возвращает символ с индексом index из объекта типа StringBuffer.

StringBuffer delete(int start, int end)

Удаляет символы из объекта StringBuffer в указанном диапазоне индексов.

StringBuffer deleteCharAt(int index)

Удаляет символы из объекта StringBuffer, начиная от индекса index до конца строки.

void ensureCapacity(int minimumCapacity)

Устанавливает минимальную емкость StringBuffer не менее указанного значения.

void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)

Символы из StringBuffer копируются в массив dst.

StringBuffer insert(int offset, boolean b)

Вставляет с раздвижкой строковое представление булевской переменной в StringBuffer.

StringBuffer insert(int offset, char c)

Вставляет с раздвижкой строковое представление переменной char в StringBuffer.

StringBuffer insert(int offset, char[] str)

Вставляет с раздвижкой строковое представление массива символов в StringBuffer.

StringBuffer insert(int index, char[] str, int offset, int len)

Вставляет с раздвижкой строковое представление подмассива символов в StringBuffer.

StringBuffer insert(int offset, double d)

Вставляет с раздвижкой строковое представление переменной double в StringBuffer.

StringBuffer insert(int offset, float f)

Вставляет с раздвижкой строковое представление переменной float в StringBuffer.

StringBuffer insert(int offset, int i)

Вставляет с раздвижкой строковое представление переменной int в StringBuffer.

StringBuffer insert(int offset, long l)

Вставляет с раздвижкой строковое представление переменной long в StringBuffer.

StringBuffer insert(int offset, Object obj)

Вставляет с раздвижкой строковое представление переменной типа Object в StringBuffer.

StringBuffer insert(int offset, String str)

Вставляет с раздвижкой строковое представление переменной String в StringBuffer.

int length()

Возвращает длину объекта StringBuffer.

StringBuffer replace(int start, int end, String str)

Заменяет символы в подстроке из StringBuffer, начиная с индекса start до индекса end на строку String.

StringBuffer reverse()

Изменяет последовательность символов в строке StringBuffer.

void setCharAt(int index, char ch)

Заменяет символ в позиции index на символ ch.

void setLength(int newLength)

Устанавливает длину StringBuffer.

String substring(int start)

Возвращает новую строку String из StringBuffer. Строка получается как подстрока, начиная с указанного индекса до конца StringBuffer.

String substring(int start, int end)

Возвращает новую String, которая получается как подстрока из StringBuffer между символами с индексами start и end.

String toString()

Преобразует в String содержимое объекта StringBuffer.

Класс StringBuffer обеспечивает методы для добавления значений в конец объекта StringBuffer, вставки внутрь StringBuffer и удаления из StringBuffer. Рассмотрим предыдущий пример чтения из файла:

File:

abcdefg

Псевдокод:

StringBuffer sb = new StringBuffer();

while( неКонецФайла ) {

sb. append( nextCharacter );

}

String value = sb. toString();

Здесь не будет создаваться множесво промежуточных строк.

Класс StringTokenizer

Еще один полезный класс - StringTokenizer. Класс StringTokenizer разрешает разделять строку на части, называемые токенами (token). Пример использования – чтение значений, разделенных запятыми, например:

1,2,3,4,5,6,7,8,9

Класс StringTokenizer выделит из строки список токенов. В табл. 10.20 перечислены конструкторы StringTokenizer.

Табл. 10.20. Конструкторы StringTokenizer

Meтод

Описание

StringTokenizer(String str)

Создает StringTokenizer для указанной строки.

StringTokenizer(String str, String delim)

Конструирует StringTokenizer для указанной строки с указанием разделителя между токенами.

StringTokenizer(String str, String delim, boolean returnDelims)

Конструирует StringTokenizer для указанной строки с указанием разделителя между токенами и булевским значением, возвращаемым после выборки токена.

Табл. 10.21 показывает методы класса StringTokenizer.

Табл. 10.21. Методы StringTokenizer

Meтод

Описание

int countTokens()

Определяет, сколько раз можно вызвать метод nextToken, прежде чем он сгенерирует исключение.

boolean hasMoreElements()

Возвращает, сколько токенов в данной строке осталось.

boolean hasMoreTokens()

Возвращает, сколько токенов в данной строке осталось. Эквивалентен предыдущему методу.

Object nextElement()

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

String nextToken()

Возвращает следующий токен из StringTokenizer.

String nextToken(String delim)

Возвращает следующий токен из StringTokenizer с учетом ограничителя.

Вот пример использования класса StringTokenizer для разделения значений, перечисленных через запятые:

String source = "1,2,3,4,5,6,7,8,9";

StringTokenizer st = new StringTokenizer( source, ",", false );

while( st. hasMoreTokens() ) {

String value = st. nextToken();

System. out. println( value );

}

Вывод этого кода:

1

2

3

4

5

6

7

8

9

Заключение

Java обеспечивает классы – оболочки для всех примитивных типов данных. В этих классах есть методы для преобразования чисел в строки и наоборот и для преобразования примитивных типов между собой.

Класс String - это специализированный класс, который разделяет свойство классов-оболочек – неизменяемости хранимых значений. Кроме того, Java сохраняет строки в специальной таблице для оптимизации памяти. Для устранения недостатков, связанных с сохранением промежуточных строк Java имеет класс StringBuffer, который позволяет изменять строки в таблице.

В следующей главе рассмативаются классы Java для хранения данных – классы-коллекции.

Контрольные вопросы

Когда требуется использовать классы-оболочки, а не примитивные типы данных? Как преобразовать String в Integer? Что за свойство неизменяемости данных в классах-оболочках? Какой нежелательный эффект имеет класс String? Что такое таблица для хранения объектов типа String? В чем разница между классами String и StringBuffer? Как реверсировать строку? Что такое класс StringTokenizer? В чем разница между токеном и ограничителем? Когда надо использовать класс StringTokenizer?

Упражнения

Используя класс StringTokenizer, разделите файл на токены и выведите каждый токен на отдельной строке. Разделитель между токенами – точка. Используя класс StringBuffer, прочитайте текст из стандартного ввода (System. in) и выведите строку, когда пользователь введет Enter.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5