Рубрики
Без рубрики

Краткое руководство по Java StringTokenizer

Узнайте, как использовать StringTokenizer на Java.

Автор оригинала: baeldung.

Краткое руководство по Java StringTokenizer

1. Обзор

В этой быстрой статье мы изумим фундаментальный класс на Java – СтрингТокенизер .

2. Струнный Токенизер

тем Струнный Токенизер класс помогает нам разделить Строки в несколько токенов.

StreamTokenizer обеспечивает аналогичную функциональность, но метод токенизации намного проще, чем тот, который используется StreamTokenizer класс. Методы СтрингТокенизер не различать идентификаторы, числа и цитируемые строки, а также не распознавать и пропускать комментарии.

Набор делимитеров (символов, отделяющихся токенами) может быть указан либо во время создания, либо на основе одного токена.

3. Использование StringTokenizer

Самый простой пример использования СтрингТокенизер будет разделить Струнные на основе указанных делимитаторов.

В этом быстром примере мы разделим строку аргументов и добавим токены в список :

public List getTokens(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 List getTokensWithCollection(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 List getTokensFromFile( 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 List expectedTokensForString = 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 .