詳解StreamTokenizer的用法

查看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);
		}
	
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章