Использование класса String
Обработка строк в Java выполняется с помошью класса String. Класс String - это набор символов, соответствующих какому-то значению. Строка ограничивается уавычками:
String name = "Michael";
В Java управление строками организовано не так, как для примитивных типов. Строка – это массив символов в памяти. Но, как и для классов-оболочек, значение строки не может изменяться, но Вы можете всегда создать новую строку с новым значением. Для хранения строк в Java создается таблица, в которой сохраняются все строки. Если Вы создаете новую, но ее значение уже есть в таблице, то просто передается ссылка на уже находящуюся в таблице строку. Это делается с целью минимизации дублирования строк, что обычно часто происходит в программах. Обычно большинство программистов на Java даже не понимают, почему строки нельзя изменять и что строки хранятся в специальной таблице. То, что строки не могут изменяться, приводит к тому, что всякое изменение строки ведет к созданию новой строки в таблице.
Класс String – особенный, так как для него переопределена операция сложения. Например:
String greeting = "Hello";
greeting += ", ";
greeting += "World!";
System. out. println( greeting );
Если Вы запустите этот код, то увидите на экране:
Hello, World!
Это то, что мы ожидали, но что же происходит в памяти? При создании новой строки "Hello" в таблицу добавляется новый вход. Когда к строке добавляется точка, строка "Hello" не изменяется, но в таблицу добавляется новый вход "Hello, ". Далее, добавляя "World!", мы создаем еще одну строку в таблице, значение этой строки - "Hello, World!". Таким образом, в таблице будут храниться три строки, причем две из них не нужны:
Hello
Hello,
Hello, World
Конечно, сборщик мусора очистит занятую память, но тогда, когла это нужно будет делать. Этот пример, может, и не кажется таким страшным, но рассмотрим следующий код в котором читается символ за символом из текстового файла:
String value;
while( notEndOfFile ) {
value += nextCharacter;
}
Пусть текстовый файл выглядит следующим образом:
abcdefg
В результате в таблице будут сохранены строки:
a
ab
abc
abcd
abcde
abcdef
abcdefg
А если в файле сотни килобайтов? Тогда возникает серьезная проблема. Из-за таких ограничений класса String в Java есть еще один класс - StringBuffer. Этот класс StringBuffer поддерживает набор символов и позволяет изменять и добавлять символы в строку. Можно построить объект класса StringBuffer из String, можно преобразовать StringBuffer в String. Если Вы изменяете строки, то лучше использовать StringBuffer. Между классами String и StringBuffer есть функциональные различия, Вы можете увидеть их, если подробнее познакомитесь с обоими классами.
Класс String
Класс String Обеспечивает методы, перечисленные в табл. 10.18.
Табл. 10.18.Методы класса String | |
Метод | Описание |
char charAt(int index) | Возвращает символ по индексу. |
int compareTo(Object o) | Сравнивает эту строку с другой, заданной Object. |
int compareTo(String anotherString) | Сравнивает две строки. |
int compareToIgnoreCase(String str) | Сравнивает две строки, игнорируя регистр букв. |
String concat(String str) | Присоединяет указанную строку к данной. |
static String copyValueOf(char[] data) | Возвращает ссылку на строку, эквивалентную указанному массиву символов. |
static String copyValueOf(char[] data, int offset, int count) | Возвращает ссылку на строку, эквивалентную указанному массиву символов. |
boolean endsWith(String suffix) | Проверяет, заканчивается ли строка указанной строкой suffix. |
boolean equals(Object anObject) | Сравнивает на равенство две строки. |
boolean equalsIgnoreCase(String anotherString) | Сравнивает на равенство две строки, игнорируя регистр символов. |
byte[] getBytes() | Преобразует строку в массив байтов в соответствии с принятой по умолчанию кодировкой. |
byte[] getBytes(String enc) | Преобразует данную строку в массив байтов в соответствии с кодировкой, заданной строкой enc. |
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) | Копирует символы из данной строки в массив символов. Указывается диапазон символов в данной строке и место в массиве. |
int indexOf(int ch) | Возвращает индекс первого вхождения символа ch в строку. |
int indexOf(int ch, int fromIndex) | Возвращает индекс первого вхождения символа ch в строку, начиная с индекса fromIndex. |
int indexOf(String str) | Возвращает индекс первого вхождения подстроки str в строку. |
int indexOf(String str, int fromIndex) | Возвращает индекс первого вхождения подстроки str в строку, начиная с индекса fromIndex. |
String intern() | Возвращает ссылку на каноническое представление строки. |
int lastIndexOf(int ch) | Возвращает индекс последнего вхождения символа ch в строку. |
int lastIndexOf(int ch, int fromIndex) | Возвращает индекс последнего вхождения символа ch в строку при поиске с конца, начиная с символа с индексом fromIndex. |
int lastIndexOf(String str) | Возвращает индекс последнего вхождения подстроки str в строку. |
int lastIndexOf(String str, int fromIndex) | Возвращает индекс последнего вхождения подстроки str в строку при поиске с конца, начиная с символа с индексом fromIndex. |
int length() | Возвращает длину строки. |
boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) | Сравнивает две части строк. |
boolean regionMatches(int toffset, String other, int ooffset, int len) | Сравнивает две части строк. |
String replace(char oldChar, char newChar) | Возвращает новую строку, в которой все символы oldChar заменены на newChar. |
boolean startsWith(String prefix) | Проверяет, начинается ли строка с подстроки prefix. |
boolean startsWith(String prefix, int toffset) | Проверяет, начинается ли с указанного места в строке подстрока prefix. |
String substring(int beginIndex) | Возвращает подстроку из данной строки, начиная с индекса beginIndex |
String substring(int beginIndex, int endIndex) | Возвращает подстроку из данной строки, начиная с индекса beginIndex и до индекса endIndex. |
char[] toCharArray() | Преобразует строку в массив символов. |
String toLowerCase() | Преобразует все символы в строке в нижний регистр в соответствии с кодировкой по умолчанию, которая возвращается LocalegetDefault. |
String toLowerCase(Locale locale) | Преобразует все символы в строке в нижний регистр в соответствии с кодировкой по правилам Locale. |
String toString() | Возвращается сама строка. |
String toUpperCase() | Преобразует все символы в строке в верхний регистр в соответствии с кодировкой по умолчанию, которая возвращается LocalegetDefault. |
String toUpperCase(Locale locale) | Преобразует все символы в строке в верхний регистр в соответствии с кодировкой по правилам Locale. |
String trim() | Удаляет все пробелы с обоих концов строки. |
static String valueOf(boolean b) | Возвращает строковое представление булевского аргумента. |
static String valueOf(char c) | Возвращает строковое представление аргумента типа char. |
static String valueOf(char[] data) | Возвращает строковое представление аргумента типа char[]. |
static String valueOf(char[] data, int offset, int count) | Возвращает строковое представление части массива символов. |
static String valueOf(double d) | Возвращает строковое представление аргумента типа double. |
static String valueOf(float f) | Возвращает строковое представление аргумента типа float. |
static String valueOf(int i) | Возвращает строковое представление аргумента типа int. |
static String valueOf(long l) | Возвращает строковое представление аргумента типа long. |
static String valueOf(Object obj) | Возвращает строковое представление аргумента типа Object. |
Объекты типа String могут сравниваться с учетом и без учета регистра букв.
Например:
String s1 = "Hello";
String s2 = "hello";
if( s1.equals( s2 ) ) {
System. out. println( "Strings are exactly equal – including case" );
}
else if( s1.equalsIgnoreCase( s2 ) ) {
System. out. println( "Strings are equal – ignoring case" );
}
else {
System. out. println( "Strings are not equal" );
}
В этом случае выведется сообщение "Strings are equal – ignoring case".
В строках символы имеют индекс, который меняется от нуля:
String s1 = "Hello";
System. out. println( "Index 1 = " + s1.charAt( 1 ) ); // выводит "e"
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 |


