Java 令牌

2018-02-12 18:00 更新

Java IO教程 - Java令牌


Java有一些實(shí)用程序類,讓我們將一個(gè)字符串分解成稱為令牌的部分。

我們通過定義分隔符字符來定義被認(rèn)為是令牌的字符序列。

StringTokenizer類位于java.util包中。 StreamTokenizer類位于java.io包中。

StringTokenizer將字符串拆分成令牌,而StreamTokenizer讓我們在基于字符的流中訪問令??牌。

StringTokenizer

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é)果。

StreamTokenizer

要根據(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é)果。



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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號