鴻蒙OS StreamTokenizer

2022-10-25 15:59 更新

StreamTokenizer

java.lang.Object

|---java.io.StreamTokenizer

public class StreamTokenizer
extends Object

StreamTokenizer 類接受一個輸入流并將其解析為“令牌”,從而允許一次讀取一個令牌。 解析過程由一個表和許多可以設(shè)置為各種狀態(tài)的標(biāo)志控制。 流標(biāo)記器可以識別標(biāo)識符、數(shù)字、帶引號的字符串和各種注釋樣式。

從輸入流中讀取的每個字節(jié)都被視為 '\u0000' 到 '\u00FF' 范圍內(nèi)的一個字符。 字符值用于查找字符的五個可能屬性:空格、字母、數(shù)字、字符串引號和注釋字符。 每個字符可以有零個或多個這些屬性。

此外,一個實例有四個標(biāo)志。 這些標(biāo)志表明:

  • 行終止符是作為標(biāo)記返回還是被視為僅分隔標(biāo)記的空白。
  • 是否要識別和跳過 C 樣式的注釋。
  • 是否要識別和跳過 C++ 樣式的注釋。
  • 標(biāo)識符的字符是否轉(zhuǎn)換為小寫。

一個典型的應(yīng)用程序首先構(gòu)造這個類的一個實例,設(shè)置語法表,然后在循環(huán)的每次迭代中重復(fù)循環(huán)調(diào)用 nextToken 方法,直到它返回值 TT_EOF。

Since:

JDK1.0

字段摘要

修飾符和類型 字段 描述
double nval 如果當(dāng)前標(biāo)記是數(shù)字,則此字段包含該數(shù)字的值。
String sval 如果當(dāng)前標(biāo)記是單詞標(biāo)記,則此字段包含一個字符串,給出單詞標(biāo)記的字符。
static int TT_EOF 一個常量,指示已讀取流的結(jié)尾。
static int TT_EOL 一個常量,表示已讀取行尾。
static int TT_NUMBER 表示已讀取數(shù)字標(biāo)記的常量。
static int TT_WORD 一個常量,表示已讀取單詞標(biāo)記。
int ttype 調(diào)用 nextToken 方法后,該字段包含剛剛讀取的令牌的類型。

構(gòu)造函數(shù)摘要

構(gòu)造函數(shù) 描述
StreamTokenizer(InputStream is) 已棄用。 從 JDK 版本 1.1 開始,標(biāo)記輸入流的首選方法是將其轉(zhuǎn)換為字符流。
StreamTokenizer(Reader r) 創(chuàng)建一個解析給定字符流的分詞器。

方法總結(jié)

修飾符和類型 方法 描述
void commentChar(int ch) 指定字符參數(shù)開始一個單行注釋。
void eolIsSignificant(boolean flag) 確定是否將行尾視為標(biāo)記。
int lineno() 返回當(dāng)前行號。
void lowerCaseMode(boolean fl) 確定單詞標(biāo)記是否自動小寫。
int nextToken() 從此標(biāo)記器的輸入流中解析下一個標(biāo)記。
void ordinaryChar(int ch) 指定字符參數(shù)在此標(biāo)記器中是“普通的”。
void ordinaryChars(int low, int hi) 指定范圍 low <= c <= high 中的所有字符 c 在此標(biāo)記器中都是“普通的”。
void parseNumbers() 指定應(yīng)由此標(biāo)記器解析數(shù)字。
void pushBack() 導(dǎo)致對該標(biāo)記器的 nextToken 方法的下一次調(diào)用返回 ttype 字段中的當(dāng)前值,而不是修改 nval 或 sval 字段中的值。
void quoteChar(int ch) 指定此字符的匹配對分隔此標(biāo)記器中的字符串常量。
void resetSyntax() 重置此標(biāo)記器的語法表,以便所有字符都是“普通的”。
void slashSlashComments(boolean flag) 確定標(biāo)記器是否識別 C++ 樣式的注釋。
void slashStarComments(boolean flag) 確定分詞器是否識別 C 風(fēng)格的注釋。
String toString() 返回當(dāng)前流標(biāo)記的字符串表示形式和它出現(xiàn)的行號。
void whitespaceChars(int low, int hi) 指定范圍 low <= c <= high 的所有字符 c 都是空白字符。
void wordChars(int low, int hi) 指定 low <= c <= high 范圍內(nèi)的所有字符 c 都是單詞組成部分。
從類 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

字段詳細信息

TT_EOF

public static final int TT_EOF

一個常量,指示已讀取流的結(jié)尾。

TT_EOL

public static final int TT_EOL

一個常量,表示已讀取行尾。

TT_NUMBER

public static final int TT_NUMBER

表示已讀取數(shù)字標(biāo)記的常量。

TT_WORD

public static final int TT_WORD

一個常量,表示已讀取單詞標(biāo)記。

nval

public double nval

如果當(dāng)前標(biāo)記是數(shù)字,則此字段包含該數(shù)字的值。 當(dāng) ttype 字段的值為 TT_NUMBER 時,當(dāng)前標(biāo)記是一個數(shù)字。

該字段的初始值為 0.0。

sval

public String sval

如果當(dāng)前標(biāo)記是單詞標(biāo)記,則此字段包含一個字符串,給出單詞標(biāo)記的字符。 當(dāng)前標(biāo)記是帶引號的字符串標(biāo)記時,此字段包含字符串的正文。

當(dāng) ttype 字段的值為 TT_WORD 時,當(dāng)前標(biāo)記是一個單詞。 當(dāng) ttype 字段的值是引號字符時,當(dāng)前標(biāo)記是帶引號的字符串標(biāo)記。

該字段的初始值為空。

ttype

public int ttype

調(diào)用 nextToken 方法后,該字段包含剛剛讀取的令牌的類型。 對于單個字符標(biāo)記,其值為單個字符,轉(zhuǎn)換為整數(shù)。 對于帶引號的字符串標(biāo)記,其值為引號字符。 否則,其值為以下之一:

  • TT_WORD 表示標(biāo)記是一個詞。
  • TT_NUMBER 表示令牌是一個數(shù)字。
  • TT_EOL 表示已讀取行尾。 如果使用參數(shù) true 調(diào)用了 eolIsSignificant 方法,則該字段只能具有此值。
  • TT_EOF 表示已到達輸入流的末尾。

該字段的初始值為-4。

構(gòu)造函數(shù)詳細信息

StreamTokenizer

@Deprecated public StreamTokenizer(InputStream is)

已棄用。 從 JDK 版本 1.1 開始,標(biāo)記輸入流的首選方法是將其轉(zhuǎn)換為字符流,例如:

   Reader r = new BufferedReader(new InputStreamReader(is));
   StreamTokenizer st = new StreamTokenizer(r);

創(chuàng)建解析指定輸入流的流標(biāo)記器。 流標(biāo)記器初始化為以下默認(rèn)狀態(tài):

  • 所有字節(jié)值“A”到“Z”、“a”到“z”和“\u00A0”到“\u00FF”都被認(rèn)為是字母。
  • 所有字節(jié)值 '\u0000' 到 '\u0020' 都被認(rèn)為是空白。
  • '/' 是注釋字符。
  • 單引號 ''' 和雙引號 '"' 是字符串引號字符。
  • 解析數(shù)字。
  • 行尾被視為空白,而不是單獨的標(biāo)記。
  • 無法識別 C 樣式和 C++ 樣式的注釋。

參數(shù):

參數(shù)名稱 參數(shù)描述
is 一個輸入流。

StreamTokenizer

public StreamTokenizer(Reader r)

創(chuàng)建一個解析給定字符流的分詞器。

參數(shù):

參數(shù)名稱 參數(shù)描述
r 提供輸入流的 Reader 對象。

Since:

JDK1.1

方法詳情

resetSyntax

public void resetSyntax()

重置此標(biāo)記器的語法表,以便所有字符都是“普通的”。

wordChars

public void wordChars(int low, int hi)

指定 low <= c <= high 范圍內(nèi)的所有字符 c 都是單詞組成部分。 一個詞標(biāo)記由一個詞成分組成,后跟零個或多個詞成分或數(shù)字成分。

參數(shù):

參數(shù)名稱 參數(shù)描述
low 范圍的低端。
hi 范圍的高端。

whitespaceChars

public void whitespaceChars(int low, int hi)

指定范圍 low <= c <= high 的所有字符 c 都是空白字符。 空白字符僅用于分隔輸入流中的標(biāo)記。

指定范圍內(nèi)字符的任何其他屬性設(shè)置都將被清除。

參數(shù):

參數(shù)名稱 參數(shù)描述
low 范圍的低端。
hi 范圍的高端。

ordinaryChars

public void ordinaryChars(int low, int hi)

指定范圍 low <= c <= high 中的所有字符 c 在此標(biāo)記器中都是“普通的”。

參數(shù):

參數(shù)名稱 參數(shù)描述
low 范圍的低端。
hi 范圍的高端。

ordinaryChar

public void ordinaryChar(int ch)

指定字符參數(shù)在此標(biāo)記器中是“普通的”。 它刪除了字符作為注釋字符、單詞組件、字符串分隔符、空格或數(shù)字字符的任何特殊意義。 當(dāng)解析器遇到這樣的字符時,解析器將其視為單字符標(biāo)記并將 ttype 字段設(shè)置為字符值。

將行終止符設(shè)置為“普通”可能會干擾 StreamTokenizer 計算行數(shù)的能力。 lineno 方法可能不再在其行數(shù)中反映此類終止符的存在。

參數(shù):

參數(shù)名稱 參數(shù)描述
ch 字符。

commentChar

public void commentChar(int ch)

指定字符參數(shù)開始一個單行注釋。 此流標(biāo)記器忽略從注釋字符到行尾的所有字符。

指定字符的任何其他屬性設(shè)置都將被清除。

參數(shù):

參數(shù)名稱 參數(shù)描述
ch 字符。

quoteChar

public void quoteChar(int ch)

指定此字符的匹配對分隔此標(biāo)記器中的字符串常量。

當(dāng) nextToken 方法遇到字符串常量時,ttype 字段設(shè)置為字符串分隔符,sval 字段設(shè)置為字符串正文。

如果遇到字符串引號字符,則識別字符串,該字符串由字符串引號字符之后(但不包括)直到(但不包括)相同字符串引號字符或行終止符的下一次出現(xiàn)為止的所有字符組成 ,或文件結(jié)尾。 在解析字符串時,常見的轉(zhuǎn)義序列(例如“\n”和“\t”)會被識別并轉(zhuǎn)換為單個字符。

指定字符的任何其他屬性設(shè)置都將被清除。

參數(shù):

參數(shù)名稱 參數(shù)描述
ch 字符。

parseNumbers

public void parseNumbers()

指定應(yīng)由此標(biāo)記器解析數(shù)字。 此標(biāo)記器的語法表已修改,以便十二個字符中的每一個:

      0 1 2 3 4 5 6 7 8 9 . - 

具有“數(shù)字”屬性。

當(dāng)解析器遇到具有雙精度浮點數(shù)格式的單詞標(biāo)記時,它會將標(biāo)記視為數(shù)字而不是單詞,方法是將 ttype 字段設(shè)置為值 TT_NUMBER 并將標(biāo)記的數(shù)值放入 nval 字段。

eolIsSignificant

public void eolIsSignificant(boolean flag)

確定是否將行尾視為標(biāo)記。 如果 flag 參數(shù)為 true,則此標(biāo)記器將行尾視為標(biāo)記; nextToken 方法返回 TT_EOL 并在讀取行尾時將 ttype 字段設(shè)置為此值。

行是以回車符 ('\r') 或換行符 ('\n') 結(jié)尾的字符序列。 此外,緊跟換行符的回車符被視為單個行尾標(biāo)記。

如果標(biāo)志為 false,則行尾字符被視為空格并僅用于分隔標(biāo)記。

參數(shù):

參數(shù)名稱 參數(shù)描述
flag true 表示行尾字符是單獨的標(biāo)記; false 表示行尾字符是空格。

slashStarComments

public void slashStarComments(boolean flag)

確定分詞器是否識別 C 風(fēng)格的注釋。 如果 flag 參數(shù)為 true,則此流標(biāo)記器識別 C 樣式注釋。 連續(xù)出現(xiàn) // 之間的所有文本都將被丟棄。

如果 flag 參數(shù)為 false,則不會對 C 樣式注釋進行特殊處理。

參數(shù):

參數(shù)名稱 參數(shù)描述
flag true 表示識別和忽略 C 風(fēng)格的注釋。

slashSlashComments

public void slashSlashComments(boolean flag)

確定標(biāo)記器是否識別 C++ 樣式的注釋。 如果 flag 參數(shù)為真,則此流標(biāo)記器識別 C++ 樣式的注釋。 任何出現(xiàn)的兩個連續(xù)斜杠字符 ('/') 都被視為延伸到行尾的注釋的開頭。

如果 flag 參數(shù)為 false,則不會對 C++ 樣式的注釋進行特殊處理。

參數(shù):

參數(shù)名稱 參數(shù)描述
flag true 表示識別和忽略 C++ 風(fēng)格的注釋。

lowerCaseMode

public void lowerCaseMode(boolean fl)

確定單詞標(biāo)記是否自動小寫。 如果 flag 參數(shù)為真,則每當(dāng)返回單詞標(biāo)記時,sval 字段中的值都會小寫(通過此標(biāo)記器的 nextToken 方法,ttype 字段的值為 TT_WORD。

如果 flag 參數(shù)為 false,則不修改 sval 字段。

參數(shù):

參數(shù)名稱 參數(shù)描述
fl true 表示所有單詞標(biāo)記都應(yīng)該小寫。

nextToken

public int nextToken() throws IOException

從此標(biāo)記器的輸入流中解析下一個標(biāo)記。 下一個標(biāo)記的類型在 ttype 字段中返回。 有關(guān)令牌的其他信息可能在此標(biāo)記器的 nval 字段或 sval 字段中。

此類的典型客戶端首先設(shè)置語法表,然后坐在循環(huán)中調(diào)用 nextToken 來解析連續(xù)的令牌,直到返回 TT_EOF。

返回:

ttype 字段的值。

Throws:

Throw名稱 Throw描述
IOException 如果發(fā)生 I/O 錯誤。

pushBack

public void pushBack()

導(dǎo)致對該標(biāo)記器的 nextToken 方法的下一次調(diào)用返回 ttype 字段中的當(dāng)前值,而不是修改 nval 或 sval 字段中的值。

lineno

public int lineno()

返回當(dāng)前行號。

返回:

此流標(biāo)記器的當(dāng)前行號。

toString

public String toString()

返回當(dāng)前流標(biāo)記的字符串表示形式和它出現(xiàn)的行號。

返回的精確字符串是未指定的,盡管以下示例可以被認(rèn)為是典型的:

Token['a'], line 10

覆蓋:

類 Object 中的 toString

返回:

令牌的字符串表示

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號