本文相關資料連結,請百度「黑客日教程 STREAMTOKENIZER使用指南」
1、介紹
本教程會展示如何使用Java Streamtokenizer把字符流解析成token。
2、Streamtokenizer
Streamtokenizer按字符來讀取字符流。每個字符流可以有零個或多個:空白字符、字母、數字、字符串引用或注釋符號。
單詞字符:範圍如』a』到』z』和』A』到』Z.數字字符:0,1,…,9空白字符:0到32之間的ASCII值注釋符號:/字符串引號字符:』和「每行結尾被視為空格,c/c++格式的注釋默認不會被識別。
Streamtokenizer還有一組重要欄位:
TT_EOF – 表示流結束的常量TT_EOL – 表示行結束的常量TT_NUMBER – 表示數字標記的常量TT_WORD – 表示單詞標記的常量3、默認配置
下面來創建一個例子來解釋Streamtokenizer的機制。先創建一個Streamtokenizer的實例,然後調用nextToken()直到返回TT_EOF:
測試文件很簡單:
如果輸出上面的結果:
為了理解上面的例子,下面解釋一下StreamTokenizer.ttype、 StreamTokenizer.nval、StreamTokenizer.sval 。
ttype包含了token讀到的類型。可以是TT_EOF、TT_EOL、TT_NUMBER、TT_WORD。對於帶引號的字符串token,其值是引用字符的ASCII值。如果token是普通字符,如『!』 。如果沒有屬性,那麼ttype將填充該字符的ASCII值。
只有當token是TT_WORD的時候,會用sval來獲取token。但如果我們要處理一個引用的字符串token,比如「lazy」 ,那這個欄位會包括字符串的主體。
最後,如果是一個數字token,才用nval欄位來獲取。
4、自定義配置
現在來一個自定義的例子。
首先,使用wordChars(int low ,int hi)方法來設置額外的單詞字符。然後,將注釋字符(「/」)設置為普通字符,把「#」設置為注釋字符。
最後使用eolIsSignificant(boolean flag)方法將行結尾符設置為token字符。
例子:
得到輸出:
注意:雙引號成為token的一部分,換行符不再是空格而不是普通字符。
還可以使用quoteChar(int ch)方法更改引號字符,甚至可以通過調用whitespaceChars(int low,int hi)方法更改空白字符。
因此,可以進一步定製,以不同的組合調用StreamTokenizer的方法。
5、結論
本文介紹了如何使用StreamTokenizer類將字符流解析為token。介紹了默認設置,以及一個例子。
還展示了自定義配置,體現了StreamTokenizer的靈活性。
代碼在github上。
編譯:bealdung com
本文相關資料連結,請百度「黑客日教程 STREAMTOKENIZER使用指南」