Класс StringTokenizer

Часто текст бывает необходимо разбить на составные части, так называемые токены. К примеру, выделить слова в предложении. Для таких задач существует класс StringTokenizer. Указать список разделителей можно при создании экземпляра класса StringTokenizer либо непосредственно перед разбиением строки. К примеру (в самом начале файла программы необходимо написать строку import java.util.StringTokenizer;):

public static void main(String[] args) {

String s = "Да, это предложение нужно разбить на отдельные слова.";

StringTokenizer st = new StringTokenizer(s, ",. ");

while (st.hasMoreTokens()) {

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

}

}

Вывод в консоль:

Да

это

предложение

нужно

разбить

на

отдельные

слова

 

В конструкторе указывается строка для разбора и список разделителей в кавычках. Метод hasMoreTokens() возвращает boolean значение, показывающее, остались ли еще токены. Метод nextToken() возвращает следующий токен. В конструкторе также можно указать флаг boolean, указывающий, нужно ли включать разделители в список токенов. По умолчанию они не включаются.


 

Еще один способ разбиения строк – это использование метода split() [5], к примеру:

String s = "Да! Это - предложение, его нужно разбить на отдельные слова.";

String[] tokens = s.split("[ .,?!]+");

for (String token : tokens) {

System.out.println(token);

}

 

Вывод в консоль:

Да

Это

-

предложение

его

нужно

разбить

на

отдельные

слова

 

 

Метод split() возвращает массив строк, содержащий токены. Обратите внимание, что в отличие от StringTokenizer, в котором разделители указываются просто перечислением в строке, здесь используется разделение с помощью регулярных выражений. В выражении "[ .,?!]+" в квадратных скобках указан список разделителей, а знак «+» говорит о том, что встречающиеся последовательности разделителей будут трактоваться как один разделитель. К пример, после запятой обычно ставится пробел, то есть два разделителя идут подряд. Если в строке содержатся только разделители-пробелы, то в качестве регулярного выражения в скобках можно просто указать строку с одним пробелом: « ». Использование регулярных выражений сложнее, чем использование StringTokenizer, однако с помощью них можно создавать более мощные критерии разделения.