Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

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

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

В пакет 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 [] а). Второй метод заносит все элементы вектора в массив а, если в нем достаточно места.

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

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

Логический метод containsAll (Collection с) возвращает true, если вектор содержит все элементы указанной коллекции.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...