Лексический анализ (токенизация) строки заключается в разборе входной последовательности символов на распознанные группы (лексемы), с целью получения на выходе идентифицированных последовательностей (токенов).
Класс StringTokenizer, входящий в пакет java.util, обеспечивает возможность разбиения строки на отдельные лексемы, используя определенный набор разделителей.
При использовании StringTokenizer необходимо задать входную строку и набор разделителей в виде символьной строки. Каждый отдельный символ в строке разделителей рассматривается как самостоятельный разделитель. Например задание строки разделителей в виде «.,!» означает, что в качестве разделителя может использоваться точка, запятая или восклицательный знак.
Конструкторы класса StringTokenizer :
StringTokenizer(String str)
StringTokenizer(String str, String delim)
StringTokenizer(String str, String delim, boolean returnDelims)
str — разделяемая на лексемы строка, delim — набор разделителей, returnDelims — возвращать ли символы разделители в виде отдельных лексем (по умолчанию не возвращаются).
В качестве разделителей по умолчанию (при использовании первой формы конструктора) используется набор пробельных символов: пробел, знак табуляции, перевод строки и возврат каретки. т.е. " \t\n\r\f"
Класс StringTokenizer реализует интерфейс Enumeration, т.е. в нем реализованы методы boolean hasMoreElements()
и Object nextElement()
. Они выполняют абсолютно то же, что и два других метода класса, имеющие более информативные названия: boolean hasMoreTokens()
и String nextToken()
.
Методы StringTokenizer :
int countTokens()
— количество лексем оставшихся в анализируемой строке.boolean hasMoreElements()
илиboolean hasMoreTokens()
— есть ли в разбираемой строке еще лексемы?Object nextElement()
илиString nextToken()
— возвращает следующую лексему в виде объекта типа Object или String соответственно.String nextToken(String delim)
— переключает набор разделителей на новый, после чего возвращает следующую лексему начиная с текущей позиции. Новый набор разделителей остается для дальнейшего разбора.
ПРИМЕР 1
import java.util.StringTokenizer;
public class StringTokenizerExample_1 {
static String str = "Пример использования StringTokenizer для разбора строки на лексемы.";
public static void main(String[] args) {
StringTokenizer st = new StringTokenizer(str, " .");
int i = 1;
while(st.hasMoreTokens()) {
System.out.println((i++)+" "+st.nextToken());
}
}
}
Результат работы
1 Пример
2 использования
3 StringTokenizer
4 для
5 разбора
6 строки
7 на
8 лексемы
ПРИМЕР 2
import java.util.StringTokenizer;
public class StringTokenizerExample_2 {
static String str = "Имя:Иван|Фамилия:Иванов|E-Mail:Ivanov@mail.ru";
public static void main(String[] args) {
StringTokenizer st = new StringTokenizer(str, ":|");
while(st.hasMoreTokens()) {
System.out.println(st.nextToken()+" - "+st.nextToken());
}
}
}
Результат работы
Имя - Иван
Фамилия - Иванов
E-Mail - Ivanov@mail.ru