W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Java有一些實(shí)用程序類,讓我們將一個(gè)字符串分解成稱為令牌的部分。
我們通過定義分隔符字符來定義被認(rèn)為是令牌的字符序列。
StringTokenizer類位于java.util包中。 StreamTokenizer類位于java.io包中。
StringTokenizer將字符串拆分成令牌,而StreamTokenizer讓我們在基于字符的流中訪問令??牌。
StringTokenizer對象根據(jù)您對定界符的定義將字符串拆分為標(biāo)記。它一次返回一個(gè)令牌。
我們還可以隨時(shí)更改分隔符。我們可以通過指定字符串并接受默認(rèn)分隔符來創(chuàng)建一個(gè)StringTokenizer,它是空格,制表符,換行符,回車符和換行符(“\t \n \r \f”)如下:
StringTokenizer st = new StringTokenizer("here is my string");
我們可以在創(chuàng)建StringTokenizer時(shí)指定自己的分隔符,如下所示:下面的代碼使用空格,逗號和分號作為分隔符。
String delimiters = " ,;"; StringTokenizer st = new StringTokenizer("my text...", delimiters);
我們可以使用hasMoreTokens()方法來檢查是否有更多的令牌和nextToken()方法從字符串中獲取下一個(gè)令牌。
我們還可以使用String類的split()方法將字符串拆分為基于分隔符的令牌。
split()方法接受正則表達(dá)式作為分隔符。
以下代碼顯示如何使用StringTokenizer和String類的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)記的類型區(qū)分標(biāo)記,請使用StreamTokenizer類。
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對象作為數(shù)據(jù)源。我們可以使用FileReader對象或任何其他Reader對象作為數(shù)據(jù)源。
重復(fù)調(diào)用StreamTokenizer的nextToken()方法。它填充StreamTokenizer對象的三個(gè)字段:ttype,sval和nval。ttype字段指示已讀取的令牌類型。
以下是類型字段的四個(gè)可能的值:
領(lǐng)域 | 意義 |
---|---|
TT_EOF | 已達(dá)到流的結(jié)尾。 |
TT_EOL | 已達(dá)到行尾。 |
TT_WORD | 字(字符串)已從流中讀取為令牌。 |
TT_NUMBER | 數(shù)字已從流中讀取為令牌。 |
如果ttype具有TT_WORD,則字符串值存儲在其字段sval中。
如果返回TT_NUBMER,其數(shù)值存儲在nval字段中。
上面的代碼生成以下結(jié)果。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: