Важным моментом является поиск замена в строках.
Есть методы, позволяющие проверить, с чего начинается и чем заканчивается строка:
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 |


