Использование класса 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