2013-07-18 32 views
0

我正在開發一個應用程序,我需要處理包含電子郵件的文本文件。我需要一切從文本標記和下面是令牌的定義:「!」Java的自定義標記器

  1. 字母數字
  2. 區分大小寫(大小寫被保留)
  3. 和'$'將被視爲組成字符。例如:​​,$50是令牌
  4. '。' (點)和','逗號將被視爲組成字符,如果它們出現在數字之間。例如:

    192.168.1.1,24,500美元

    是令牌。

等..

請建議我對Java的一些開源斷詞,其易於定製,以滿足我的需求。只需使用StringTokenizer和正則表達式就足夠了?我也必須執行停止操作,這就是爲什麼我要尋找一個開源的tokenizer,它也會執行一些額外的事情,如停止,阻塞。

回答

1

幾點意見前面:

的StringTokenizer是保留兼容性 原因,雖然它的使用是在新代碼氣餒的遺留類。建議 任何尋求此功能的人都使用字符串 或java.util.regex包的拆分方法。

  • 始終use 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(給定.,是否包括在內)?

我想還有其他的事情要考慮。

希望這有助於你開始。

+0

感謝您的幫助和指導! – kunal18

+0

@stalin當然,很高興幫助! –