Назад Зміст Вперед

2.1 Основи рarsing, клас StringTokenizer.

Синтаксичний аналіз (па́рсинг) (англ. parsing) — в інформатиці це процес аналізу вхідної послідовності символів, з метою розбору граматичної структури згідно із заданою формальною граматикою. Синтаксичний аналізатор (англ. parser) — це програма або частина програми, яка виконує синтаксичний аналіз.

В пакет java.util входить простий клас StringTokenizer, що полегшує розбір рядків. Клас StringTokenizer невеликий, в ньому три конструктори і шість методів. 


Конструктори:


StringTokenizer ( Strinq рядок)
StringTokenizer ( Strinq рядок, Strinq розділювачі)
StringTokenizer ( Strinqрядок, Strinq розділювачі, boolean                                               розділювач_як_лексема)

1 конструктор: StringTokenizer (String str)створює об'єкт, готовий розбити рядок str на слова, розділені так званими сепараторами - пробілами, символами табуляцій '\t', переводу рядка '\n' і повернення каретки '\r'. Сепаратори не включаються в число слів.

2 конструктор: StringTokenizer (String str. String delimeters) задає сепаратори другим параметром delimeters, наприклад: StringTokenizer("Цей,текст:без-пробілів", " \t\n\r,:-");
Тут перший сепаратор - пробіл. Потім ідуть символ табуляції, символ переводу рядка, символ повернення каретки, кома, двокрапка, дефіс. Порядок розташування сепараторів у рядку delimeters не має значення. Сепаратори не включаються в число слів.

3 конструктор дозволяє включити сепаратори в число слів:
StringTokenizer(String str, String deІimeters, boolean flag);
Якщо параметр flag рівний true, то сепаратори включаються в число слів, якщо false — ні. Наприклад: StringTokenizer("а - (b + с) / b * с", " \t\n\r+*-/(), true);


Методи:

В розборі рядка на слова активно приймають участь два методи:
1 метод nextToken() повертає у вигляді рядка наступне слово;
2 логічний метод hasMoreTokens() повертає true, якщо в рядку ще є слова, і false, якщо слів більше немає.
3 метод countTokens() повертає число слів, що залишилися.
4 метод nextToken(string newDelimeters) дозволяє "на ходу" міняти сепаратори. Наступне слово
буде виділено за новим сепараторам newDeІimeters; нові сепаратори діють далі замість старих,
визначених в конструкторі або в попередньому методі nextToken().
Останні два методи nextEІement() і hasMoreEІements() реалізують інтерфейс Enumeration. Вони просто звертаються до методів nextToken () і hasMoreTokens().


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

import java.util.*;
class Parse{
public static void main(String[] args){
String s = "String, which we want to decompose in words ";
StringTokenizer st = new StringTokenizer(s, " \t\n\r,.");
while(st.hasMoreTokens()){
// Одержуємо слово і що-небудь робимо з ним, наприклад, просто виводимо на екран
System.out.println(st.nextToken()) ;
}
}
}

Одержані слова заносяться в який-небуть клас-колекцію: Vector, Stack або інший, найбільш зручний для подальшої обробки тексту контейнер. 



.