Пользовательский токенизатор для Java

Я разрабатываю приложение, в котором мне нужно обрабатывать текстовые файлы, содержащие электронные письма. Мне нужны все токены из текста, и следующее определение токена:

  1. буквенно-цифровой
  2. С учетом регистра (регистр должен быть сохранен)
  3. '!' и '$' следует рассматривать как составные символы. Пример: FREE!!, $50 — токены.
  4. '.' (точка) и запятая ',' должны рассматриваться как составляющие символы, если они встречаются между числами. Например:

    192.168.1.1, $24,500

    являются жетонами.

и так далее..

Пожалуйста, предложите мне несколько токенизаторов с открытым исходным кодом для Java, которые легко настроить в соответствии с моими потребностями. Будет ли достаточно просто использовать StringTokenizer и регулярное выражение? Я также должен выполнять остановку, и поэтому я искал токенизатор с открытым исходным кодом, который также будет выполнять некоторые дополнительные функции, такие как остановка, выделение.


person kunal18    schedule 18.07.2013    source источник


Ответы (1)


Несколько комментариев заранее:

StringTokenizer — это устаревший класс, который сохраняется из соображений совместимости, хотя его использование в новом коде не рекомендуется. Всем, кто ищет эту функциональность, рекомендуется вместо этого использовать метод split String или пакет java.util.regex.

  • Всегда сначала используйте Google — первый результат на данный момент это JTopas. Я не использовал его, но похоже, что он может работать для этого

Что касается регулярного выражения, это действительно зависит от ваших требований. Учитывая вышеизложенное, это может сработать:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Mkt {
  public static void main(String[] args) {
    Pattern p = Pattern.compile("([$\\d.,]+)|([\\w\\d!$]+)");
    String str = "--- FREE!! $50 192.168.1.1 $24,500";
    System.out.println("input: " + str);

    Matcher m = p.matcher(str);
    while(m.find()) {
      System.out.println("token: " + m.group());
    }
  }
}

Вот пример запуска:

$ javac Mkt.java && java Mkt
input: --- FREE!! $50 192.168.1.1 $24,500
token: FREE!!
token: $50
token: 192.168.1.1
token: $24,500

Теперь вам может понадобиться настроить регулярное выражение, например:

  • Вы привели $24,500 в качестве примера. Должно ли это работать для $24,500abc или $24,500EUR?
  • Вы упомянули, что 192.168.1.1 должен быть включен. Должен ли он также включать 192,168.1,1 (учитывая, что . и , должны быть включены)?

и я предполагаю, что есть другие вещи, чтобы рассмотреть.

Надеюсь, это поможет вам начать.

person icyrock.com    schedule 19.07.2013
comment
Спасибо за вашу помощь и руководство! - person kunal18; 23.07.2013
comment
@stalin Конечно, рад помочь! - person icyrock.com; 24.07.2013