Краткое руководство по Java StringTokenizer
1. Обзор
В этой быстрой статье мы изумим фундаментальный класс на Java – СтрингТокенизер .
2. Струнный Токенизер
тем Струнный Токенизер класс помогает нам разделить Строки в несколько токенов.
StreamTokenizer обеспечивает аналогичную функциональность, но метод токенизации намного проще, чем тот, который используется StreamTokenizer класс. Методы СтрингТокенизер не различать идентификаторы, числа и цитируемые строки, а также не распознавать и пропускать комментарии.
Набор делимитеров (символов, отделяющихся токенами) может быть указан либо во время создания, либо на основе одного токена.
3. Использование StringTokenizer
Самый простой пример использования СтрингТокенизер будет разделить Струнные на основе указанных делимитаторов.
В этом быстром примере мы разделим строку аргументов и добавим токены в список :
public ListgetTokens(String str) { List tokens = new ArrayList<>(); StringTokenizer tokenizer = new StringTokenizer(str, ","); while (tokenizer.hasMoreElements()) { tokens.add(tokenizer.nextToken()); } return tokens; }
Обратите внимание, как мы нарушаем Струнные в список токенов на основе делимитатора ‘ , ‘. Затем в цикле, используя tokens.add () метод; мы добавляем каждый токен в ArrayList.
Например, если пользователь дает ввод как ” Добро пожаловать, в,baeldung.com этот метод должен вернуть список, содержащий фрагмент из трех слов, как ” Добро пожаловать “, ” ” и ” baeldung.com “.
3.1. Подход Java 8
С СтрингТокенизер реализует Перечисление интерфейс, мы можем использовать его с J ava ‘ы Коллекции интерфейс.
Если мы рассмотрим предыдущий пример, мы можем получить тот же набор токенов с помощью Collections.list () метод и Поток API:
public ListgetTokensWithCollection(String str) { return Collections.list(new StringTokenizer(str, ",")).stream() .map(token -> (String) token) .collect(Collectors.toList()); }
Здесь мы проходят мимо СтрингТокенизер себя в качестве параметра в Collections.list () метод.
Следует отметить, что, начиная с Перечисление является Объект типа, мы должны набрать маркеры, чтобы Струнные тип (т.е. зависит от реализации; если мы используем Список Интегер/ тогда нам нужно будет набрать литые с Интегер/ ).
3.2. Варианты StringTokenizer
СтрингТокенизер поставляется с двумя перегруженными конструкторами рядом со конструктором по умолчанию: StringTokenizer (String str) и StringTokenizer (String str, String delim, boolean returnDelims):
StringTokenizer (String str, String delim, boolean returnDelims) принимает дополнительные булеан ввод. Если булеан значение истинное , то СтрингТокенизер рассматривает сам делимитр как токен и добавляет его во внутренний пул токенов.
StringTokenizer (String str) является ярлыком для предыдущего примера; он внутренне вызывает другого конструктора с hard-coded delimiter как “Зтэнеф” и boolean значение, как ложный.
3.3. Настройка токенов
СтрингТокенизер также поставляется с перегруженным nextToken () метод, который принимает фрагмент строки в качестве ввода. Этот Струнные фрагмент выступает в качестве дополнительного набора делимитаторов; на основе которых токены снова реорганивироваться.
Например, если мы можем пройти ‘ e ‘ в nextToken () метод дальнейшего разрыва строки на основе списка e ‘:
tokens.add(tokenizer.nextToken("e"));
Таким образом, для данной строки ‘ Здравствуйте, Баелдунг.com ‘ мы будем производить следующие токены:
H llo ba ldung.com
3.4. Длина токена
Чтобы подсчитать доступное количество токенов, мы можем использовать СтрингТокенизер ‘ы размер метод:
int tokenLength = tokens.size();
3.5. Чтение из файла CSV
Теперь давайте попробуем использовать СтрингТокенизер в реальном случае использования.
Есть сценарии, где мы пытаемся читать данные из файлов CSV и анализировать данные на основе данного пользователю делимитатора.
Использование СтрингТокенизер , мы можем легко добраться:
public ListgetTokensFromFile( String path , String delim ) { List tokens = new ArrayList<>(); String currLine = ""; StringTokenizer tokenizer; try (BufferedReader br = new BufferedReader( new InputStreamReader(Application.class.getResourceAsStream( "/" + path )))) { while (( currLine = br.readLine()) != null ) { tokenizer = new StringTokenizer( currLine , delim ); while (tokenizer.hasMoreElements()) { tokens.add(tokenizer.nextToken()); } } } catch (IOException e) { e.printStackTrace(); } return tokens; }
Здесь функция принимает два аргумента; одно как имя файла CSV (т.е. прочитано от ресурсов «Src -> -> ресурсы» папку), а другой в качестве делимитатора.
На основе этих двух аргументов данные CSV считываются строкой за строкой, и каждая строка токенизируется с помощью СтрингТокенизер .
Например, мы вложили следующее содержимое в CSV:
1|IND|India 2|MY|Malaysia 3|AU|Australia
Таким образом, следует сгенерированы следующие токены:
1 IND India 2 MY Malaysia 3 AU Australia
3.6. Тестирование
Теперь давайте создадим быстрый тестовый случай:
public class TokenizerTest { private MyTokenizer myTokenizer = new MyTokenizer(); private ListexpectedTokensForString = Arrays.asList( "Welcome" , "to" , "baeldung.com" ); private List expectedTokensForFile = Arrays.asList( "1" , "IND" , "India" , "2" , "MY" , "Malaysia" , "3", "AU" , "Australia" ); @Test public void givenString_thenGetListOfString() { String str = "Welcome,to,baeldung.com"; List actualTokens = myTokenizer.getTokens( str ); assertEquals( expectedTokensForString, actualTokens ); } @Test public void givenFile_thenGetListOfString() { List actualTokens = myTokenizer.getTokensFromFile( "data.csv", "|" ); assertEquals( expectedTokensForFile , actualTokens ); } }
4. Заключение
В этом быстром учебнике мы использовали несколько практических примеров использования основных java- СтрингТокенизер .
Как всегда, полный исходный код доступен более на GitHub .