на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Наследование и классы-коллекции
p align="left">String s2 = "Другая-строка";

сравнение s1 == s2 дает в результате false.

Значение true получится, только если обе ссылки указывают на одну и ту же строку, например, после присваивания si = s2.

Интересно, что если мы определим s2 так:

String s2 == "Какая-то строка";

то сравнение s1 == s2 даст в результате true, потому что компилятор создаст только один экземпляр константы "Какая-то строка" и направит на него все ссылки.

Для сравнения содержимого строк есть несколько методов.

Логический метод equals (Object obj), переопределенный из класса Оbject, возвращает true, если аргумент obj не равен null, является объектом класса String, и строка, содержащаяся в нем, полностью идентична данной строке вплоть до совпадения регистра букв. В остальных случаях возвращается значение false.

Логический метод equalsIgnoreCase(Object obj) работает так же, но одинаковые буквы, записанные в разных регистрах, считаются совпадающими.

Метод compareTo(string str) возвращает целое число типа int, вычисленное по следующим правилам:

1. Сравниваются символы данной строки this и строки str с одинаковым индексом, пока не встретятся различные символы с индексом, допустим k, или пока одна из строк не закончится.

2. В первом случае возвращается значение this.charAt(k) - str.charAt(k), т. е. разность кодировок Unicode первых несовпадающих символов.

3. Во втором случае возвращается значение this.length() - str.length(), т. е. разность длин строк.

4. Если строки совпадают, возвращается 0.

Если значение str равно null, возникает исключительная ситуация.

Нуль возвращается в той же ситуации, в которой метод equals() возвращает true.

Метод compareToignoreCase(string str) производит сравнение без учета регистра букв, точнее говоря, выполняется метод

this.toUpperCase().toLowerCase().compareTo(

str.toUpperCase().toLowerCase());

Еще один метод-- compareTo (Object obj) создает исключительную ситуацию, если obj не является строкой. В остальном он работает как метод compareTo(String str).

Эти методы не учитывают алфавитное расположение символов в локальной кодировке.

Русские буквы расположены в Unicode по алфавиту, за исключением одной буквы. Заглавная буква Ё расположена перед всеми кириллическими буквами, ее код '\u040l', а строчная буква е -- после всех русских букв, ее код '\u0451'.

Кодировки русских букв:

`А' ~ 1040 ~ \u410

`Я'~ 1071 ~ \u42F

`а' ~ 1072 ~ \u430

`я' ~ 1103 ~ \u44F

Как найти символ в строке

Поиск всегда ведется с учетом регистра букв.

Первое появление символа ch в данной строке this можно отследить методом indexOf(int ch), возвращающим индекс этого символа в строке или -1, если символа ch в строке this нет.

Например, "Молоко", indexOf('о') выдаст в результате 1.

Второе и следующие появления символа ch в данной строке this можно отследить методом indexOf(int ch, int ind).

Этот метод начинает поиск символа ch с индекса ind. Если ind < 0, то поиск идет с начала строки, если ind больше длины строки, то символ не ищется, т. е. возвращается -1.

Последнее появление символа ch в данной строке this отслеживает метод lastIndexof (int ch). Он просматривает строку в обратном порядке. Если символ ch не найден, возвращается.-1.

Предпоследнее и предыдущие появления символа ch в данной строке this можно отследить методом lastIndexof(int ch, int ind), который просматривает строку в обратном порядке, начиная с индекса ind.

Если ind больше длины строки, то поиск идёт от конца строки, если ind < 0, то возвращается -1.

Как найти подстроку

Поиск всегда ведется с учетом регистра букв.

Первое вхождение подстроки sub в данную строку this отыскивает метод indexof (String sub). Он возвращает индекс первого символа первого вхождения подстроки sub в строку или -1, если подстрока sub не входит в строку this.

Если вы хотите начать поиск не с начала строки, а с какого-то индекса ind, используйте метод indexOf (String sub, int ind). если ind < 0, то поиск идет с начала строки, если ind больше .длины строки, то символ не ищется, т. е. возвращается -1.

Последнее вхождение подстроки sub в данную строку this можно отыскать методом lastindexof (string sub), возвращающим индекс первого символа последнего вхождения подстроки sub в строку this или (-1), если подстрока sub не входит в строку this.

Последнее вхождение подстроки sub не во всю строку this, а только в ее начало до индекса ind можно отыскать методом lastIndexof(String stf, int ind). Если ind больше длины строки, то поиск идет от конца строки, если ind < 0, то возвращается -1.

Перечисленные выше методы создают исключительную ситуацию, если

sub == null.

Если вы хотите осуществить поиск, не учитывающий регистр букв, измените предварительно регистр всех символов строки.

Как изменить регистр символов

Метод toLowerCase () возвращает новую строку, в которой все буквы переведены в нижний регистр, т. е. сделаны строчными.

Метод toUpperCase () возвращает новую строку, в которой все буквы переведены в верхний регистр, т. е. сделаны прописными.

При этом используется локальная кодовая таблица по умолчанию. Если нужна другая локаль, то применяются методы toLowerCase(Locale loc) и toUpperCase(Locale loc).

Как заменить отдельный символ

Метод replace (int old, int new) возвращает новую строку, в которой все вхождения символа old заменены символом new. Если символа old в строке нет, то возвращается ссылка на исходную строку.

Например, после выполнения "Рука в руку сует хлеб", replace ('у', 'е') получим строку "Река в реке сеет хлеб".

Регистр букв при замене учитывается.

Как убрать пробелы в начале и конце строки

Метод trim() возвращает новую строку, в которой удалены начальные и конечные символы с кодами, не превышающими '\u0020'.

Как преобразовать данные другого типа в строку

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

Класс String содержит восемь статических методов valueof (type elem) преобразования в строку примитивных типов boolean, char, int, long, float, double, массива char[], и просто объекта типа Object.

Девятый метод valueof(char[] ch, int offset, int len) преобразует в строку подмассив массива ch, начинающийся с индекса offset и имеющий len элементов.

Кроме того, в каждом классе есть метод toString (), переопределенный или просто унаследованный от класса Object. Он преобразует объекты класса в строку. Фактически, метод valueOf() вызывает метод toString() соответствующего класса. Поэтому результат преобразования зависит от того, как реализован метод toString().

Еще один простой способ -- сцепить значение elem какого-либо типа с пустой строкой: "" + elem. При этом неявно вызывается метод elem.toString ().

Синтаксический разбор строки

Задача разбора введенного текста -- вечная задача программирования, наряду с сортировкой и поиском.

В пакет
java.util входит простой класс StringTokenizer, облегчающий разбор строк.

Класс StringTokenizer

Класс StringTokenizer из пакета java.util небольшой, в нем три конструктора и шесть методов.

Первый конструктор StringTokenizer (String str) создает объект, готовый разбить строку str на слова, разделенные пробелами, символами табуляций '\t', перевода строки '\n' и возврата каретки '\r'. Разделители не включаются в число слов.

Второй конструктор StringTokenizer (String str, String delimeters) задает разделители вторым параметром delimeters, например:

StringTokenizer("Казнить,нельзя:пробелов-нет", " \t\n\r,:-");

Здесь первый разделитель -- пробел. Потом идут символ табуляции, символ перевода строки, символ возврата каретки, запятая, двоеточие, дефис. Порядок расположения разделителей в строке delimeters не имеет значения. Разделители не включаются в число слов.

Третий конструктор позволяет включить разделители в число слов:

StringTokenizer(String str, String delimeters, boolean flag);

В разборе строки на слова активно участвуют следующие методы:

o метод nextToken() возвращает в виде строки следующее слово.

o метод hasMoreTokens() возвращает true, если в строке еще есть слова, и false, если слов больше нет.

o метод countTokens() возвращает число оставшихся слов.

o метод nextToken(string newDelimeters) позволяет "на ходу" менять разделители. Следующее слово будет выделено по новым разделителям newDelimeters; новые разделители действуют далее вместо старых разделителей, определенных в конструкторе или предыдущем методе nextToken().

o методы nextElement() и hasMoreElements() реализуют интерфейс Enumeration. Они просто обращаются к методам nextToken() и hasMoreTokens().

Пример. Разбиение строки на слова :

String s = "Строка, которую мы хотим разобрать на слова";

StringTokenizer st = new StringTokenizer(s, " \t\n\r,.");

while(st.hasMoreTokens()){

// Получаем слово и что-нибудь делаем с ним, например,

// просто выводим на экран

System.out.println(st.nextToken()) ;

}

Полученные слова обычно заносятся в какой-нибудь класс-коллекцию: Vector, Stack или другой, наиболее подходящий для дальнейшей обработки текста контейнер. Классы-коллекции мы рассмотрены далее.

Приложение 3. Классы - коллекции

При решении задач, в которых количество элементов заранее неизвестно, элементы надо часто удалять и добавлять используются коллекции.

В языке Java с самых первых версий есть класс Vector, предназначенный для хранения переменного числа элементов самого общего типа Object.

Класс Vector

В классе Vector из пакета java.util хранятся элементы типа Object, а значит, любого типа. Количество элементов может быть любым и наперед не определяться. Элементы получают индексы 0, 1, 2, .... К каждому элементу вектора можно обратиться по индексу, как и к элементу массива.

Кроме количества элементов, называемого размером (size) вектора, есть еще размер буфера -- емкость (capacity) вектора. Обычно емкость совпадает с размером вектора, но можно ее увеличить методом ensureCapacity(int minCapacity) или сравнять с размером вектора методом trimToSize().

Как создать вектор

В классе четыре конструктора:

Vector () -- создает пустой объект нулевой длины;

Vector (int capacity) -- создает пустой объект указанной емкости capacity;

Vector (int capacity, int increment) -- создает пустой объект указанной емкости capacity и задает число increment, на которое увеличивается емкость при необходимости;

vector (Collection с) -- вектор создается по указанной коллекции. Если capacity отрицательно, создается исключительная ситуация. После создания вектора его можно заполнять элементами.

Как добавить элемент в вектор

Метод add (Object element) позволяет добавить элемент в конец вектора.

Методом add (int index, Object element) можно вставить элемент в указанное место index. Элемент, находившийся на этом месте, и все последующие элементы сдвигаются, их индексы увеличиваются на единицу.

Метод addAll (Collection coll) позволяет добавить в конец вектора все элементы коллекции coll.

Методом addAll(int index, Collection coll) возможно вставить в позицию index все элементы коллекции coll.

Как заменить элемент

Метод set (int index, Object element) заменяет элемент, стоявший в векторе в позиции index, на элемент element.

Как узнать размер вектора

Количество элементов в векторе всегда можно узнать методом size(). Метод capacity()возвращает емкость вектора.

Логический метод isEmpty() возвращает true, если в векторе нет ни одного элемента.

Как обратиться к элементу вектора

Обратиться к первому элементу вектора можно методом firstElement(), к последнему -- методом lastElement(), к любому элементу -- методом get(int index).

Эти методы возвращают объект класса Object. Перед использованием его следует привести к нужному типу.

Получить все элементы вектора в виде массива типа Object[] можно методами toArray) и toArray (Object [] а). Второй метод заносит все элементы вектора в массив а, если в нем достаточно места.

Страницы: 1, 2, 3, 4, 5



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.