Java有一些實用程序類,讓我們將一個字符串分解成稱為令牌的部分。
我們通過定義分隔符字符來定義被認為是令牌的字符序列。
StringTokenizer類位于java.util包中。 StreamTokenizer類位于java.io包中。
StringTokenizer將字符串拆分成令牌,而StreamTokenizer讓我們在基于字符的流中訪問令??牌。
StringTokenizer對象根據(jù)您對定界符的定義將字符串拆分為標記。它一次返回一個令牌。
我們還可以隨時更改分隔符。我們可以通過指定字符串并接受默認分隔符來創(chuàng)建一個StringTokenizer,它是空格,制表符,換行符,回車符和換行符(“\t \n \r \f”)如下:
StringTokenizer st = new StringTokenizer("here is my string");
我們可以在創(chuàng)建StringTokenizer時指定自己的分隔符,如下所示:下面的代碼使用空格,逗號和分號作為分隔符。
String delimiters = " ,;"; StringTokenizer st = new StringTokenizer("my text...", delimiters);
我們可以使用hasMoreTokens()方法來檢查是否有更多的令牌和nextToken()方法從字符串中獲取下一個令牌。
我們還可以使用String類的split()方法將字符串拆分為基于分隔符的令牌。
split()方法接受正則表達式作為分隔符。
以下代碼顯示如何使用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); } } }
上面的代碼生成以下結果。
要根據(jù)標記的類型區(qū)分標記,請使用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ù)源。
重復調用StreamTokenizer的nextToken()方法。它填充StreamTokenizer對象的三個字段:ttype,sval和nval。ttype字段指示已讀取的令牌類型。
以下是類型字段的四個可能的值:
領域 | 意義 |
---|---|
TT_EOF | 已達到流的結尾。 |
TT_EOL | 已達到行尾。 |
TT_WORD | 字(字符串)已從流中讀取為令牌。 |
TT_NUMBER | 數(shù)字已從流中讀取為令牌。 |
如果ttype具有TT_WORD,則字符串值存儲在其字段sval中。
如果返回TT_NUBMER,其數(shù)值存儲在nval字段中。
上面的代碼生成以下結果。
更多建議: