Класс 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, однако с помощью них можно создавать более мощные критерии разделения.