W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Java有一些實(shí)用程序類(lèi),讓我們將一個(gè)字符串分解成稱(chēng)為令牌的部分。
我們通過(guò)定義分隔符字符來(lái)定義被認(rèn)為是令牌的字符序列。
StringTokenizer類(lèi)位于java.util包中。 StreamTokenizer類(lèi)位于java.io包中。
StringTokenizer將字符串拆分成令牌,而StreamTokenizer讓我們?cè)诨谧址牧髦性L問(wèn)令??牌。
StringTokenizer對(duì)象根據(jù)您對(duì)定界符的定義將字符串拆分為標(biāo)記。它一次返回一個(gè)令牌。
我們還可以隨時(shí)更改分隔符。我們可以通過(guò)指定字符串并接受默認(rèn)分隔符來(lái)創(chuàng)建一個(gè)StringTokenizer,它是空格,制表符,換行符,回車(chē)符和換行符(“\t \n \r \f”)如下:
StringTokenizer st = new StringTokenizer("here is my string");
我們可以在創(chuàng)建StringTokenizer時(shí)指定自己的分隔符,如下所示:下面的代碼使用空格,逗號(hào)和分號(hào)作為分隔符。
String delimiters = " ,;"; StringTokenizer st = new StringTokenizer("my text...", delimiters);
我們可以使用hasMoreTokens()方法來(lái)檢查是否有更多的令牌和nextToken()方法從字符串中獲取下一個(gè)令牌。
我們還可以使用String類(lèi)的split()方法將字符串拆分為基于分隔符的令牌。
split()方法接受正則表達(dá)式作為分隔符。
以下代碼顯示如何使用StringTokenizer和String類(lèi)的split()方法。
import java.util.StringTokenizer; public class Main { public static void main(String[] args) { String str = "This is a test, this is another test."; String delimiters = " ,"; // a space and a comma StringTokenizer st = new StringTokenizer(str, delimiters); System.out.println("Tokens using a StringTokenizer:"); String token = null; while (st.hasMoreTokens()) { token = st.nextToken(); System.out.println(token); } } }
上面的代碼生成以下結(jié)果。
要根據(jù)標(biāo)記的類(lèi)型區(qū)分標(biāo)記,請(qǐng)使用StreamTokenizer類(lèi)。
import static java.io.StreamTokenizer.TT_EOF; import static java.io.StreamTokenizer.TT_NUMBER; import static java.io.StreamTokenizer.TT_WORD; import java.io.IOException; import java.io.StreamTokenizer; import java.io.StringReader; public class Main { public static void main(String[] args) throws Exception { String str = "This is a test, 200.89 which is simple 50"; StringReader sr = new StringReader(str); StreamTokenizer st = new StreamTokenizer(sr); try { while (st.nextToken() != TT_EOF) { switch (st.ttype) { case TT_WORD: /* a word has been read */ System.out.println("String value: " + st.sval); break; case TT_NUMBER: /* a number has been read */ System.out.println("Number value: " + st.nval); break; } } } catch (IOException e) { e.printStackTrace(); } } }
該程序使用StringReader對(duì)象作為數(shù)據(jù)源。我們可以使用FileReader對(duì)象或任何其他Reader對(duì)象作為數(shù)據(jù)源。
重復(fù)調(diào)用StreamTokenizer的nextToken()方法。它填充StreamTokenizer對(duì)象的三個(gè)字段:ttype,sval和nval。ttype字段指示已讀取的令牌類(lèi)型。
以下是類(lèi)型字段的四個(gè)可能的值:
領(lǐng)域 | 意義 |
---|---|
TT_EOF | 已達(dá)到流的結(jié)尾。 |
TT_EOL | 已達(dá)到行尾。 |
TT_WORD | 字(字符串)已從流中讀取為令牌。 |
TT_NUMBER | 數(shù)字已從流中讀取為令牌。 |
如果ttype具有TT_WORD,則字符串值存儲(chǔ)在其字段sval中。
如果返回TT_NUBMER,其數(shù)值存儲(chǔ)在nval字段中。
上面的代碼生成以下結(jié)果。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: