查看API,百度找了很多資料,解釋的都不夠詳細,有些地方甚至模糊不清,很多注意細節都沒講到,因此,測試的過程中很多超出自己的預料,於是自己參考查到的已知資料介紹,硬着頭皮測試,總結,在原有的解釋上面用自己的理解加以補充。如果有誤請指出。
package com.java;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.StreamTokenizer;
import java.net.URLEncoder;
public class MyStreamTokenizer {
public static void main(String[] args) throws IOException {
try(InputStream inputStream=MyStreamTokenizer.class.getResourceAsStream("/myfile.txt")){
//1. 滿足 /^[a-zA-Z]\w*$/ 視爲一個分隔符 word類型
//2.滿足/^[0-9]*$/視爲一個分隔符 number類型
//3.[^\w]視爲一個分隔符 可在 else中獲得 根據ttype獲得對應的ASCLL值,在進行(char)ttype轉換爲字符
//4.行結尾換行符號忽視
StreamTokenizer tokenizer = new StreamTokenizer(inputStream);
//一旦執行該方法後不存在NUMBER類型,word類型
//每個字符視爲分割符包括行結尾符號(\r\n),會被拆成\r \n兩個字符
tokenizer.ordinaryChars(Integer.MIN_VALUE, Integer.MAX_VALUE);
//一旦執行該方法後不存在NUMBER類型,word類型
//連續讀取52<=ASCLL<=ASCLL(d)的字符視爲一個分隔符
//每個字符視爲分割符包括行結尾符號(\r\n),會被拆成\r \n兩個字符
//tokenizer.resetSyntax();
//一旦執行該方法後不存在NUMBER類型
//連續讀取52<=ASCLL<=ASCLL(d)的字符視爲一個分隔符
//一個連續的字符串中任意一個字符的ASCLL都在此範圍視該字符串爲一個分隔符,滿足該條件的分隔符是word類型,其餘的將在else代碼塊打印
tokenizer.wordChars(52, 'd');
//開啓默認註釋// 和/* ,不顯示註釋以及註釋所在行其後信息
tokenizer.slashSlashComments(true);
tokenizer.slashStarComments(true);
//自定義註釋字符,不打印其註釋,不顯示註釋以及註釋所在行其後信息
tokenizer.commentChar('/' );
tokenizer.commentChar('"' );
//註釋字符或者首字母爲該指定字符的註釋字符串,直接在文本中的紋紙打印其字符,其後不顯示
//tokenizer.quoteChar('"');
//ASCLL(0)<=ASCLL<=ASCLL(9)一個連續的字符串中任意一個字符的ASCLL都在此範圍視該字符串爲一個分隔符,並轉爲NUMBER類型,此方法會覆蓋tokenizer.wordChars(52, 'd')的部分功能
// tokenizer.parseNumbers();
//字面解釋結尾由重要意義
//如果一行是abc 實際是abc\r\n eol其實是\n 由於由重要意義因此即使下面設置 \n也是無效的
tokenizer.eolIsSignificant(true);
//將\n替換爲''打印
tokenizer.whitespaceChars('\n','\n');
//將\r替換爲''打印
tokenizer.whitespaceChars('\r','\r');
int nextToken = tokenizer.nextToken();
while(nextToken != StreamTokenizer.TT_EOF){
if(nextToken == StreamTokenizer.TT_NUMBER){
System.out.println("number "+ tokenizer.nval+" on line "+tokenizer.lineno());
}else if(nextToken==StreamTokenizer.TT_WORD) {
System.out.println("word "+ tokenizer.sval+" on line "+tokenizer.lineno());
}else {
//System.out.println("other="+nextToken);
System.out.println("other "+ (char)tokenizer.ttype+"=="+tokenizer.ttype+" on line "+tokenizer.lineno());
}
nextToken = tokenizer.nextToken();
}
}catch (Throwable e) {
// TODO: handle exception
System.out.printf("出現異常%s",e);
}
}
}