StringTokenizer類與String.split()的區別

一、StringTokenizer:字符串分隔解析類型
屬於:java.util包。

1、構造函數。

1. StringTokenizer(String str) :構造一個用來解析str的StringTokenizer對象。java默認的分隔符是“空格”、“製表符(‘\t’)”、“換行符(‘\n’)”、“回車符(‘\r’)”。
2. StringTokenizer(String str, String delim) :構造一個用來解析str的StringTokenizer對象,並提供一個指定的分隔符。
3. StringTokenizer(String str, String delim, boolean returnDelims) :構造一個用來解析str的StringTokenizer對象,並提供一個指定的分隔符,同時,指定是否返回分隔符。


2、方法。
說明:
1. 所有方法均爲public;
2. 書寫格式:[修飾符] <返回類型> <方法名([參數列表])>

如:
static int parseInt(String s) 表示:此方法(parseInt)爲類方法(static),返回類型爲(int),方法所需參數爲String類型。


1. int countTokens() :返回nextToken方法被調用的次數。如果採用構造函數1和2,返回的就是分隔符數量(例2)。

2. boolean hasMoreTokens() :返回是否還有分隔符。

3. boolean hasMoreElements() :結果同2。

4. String nextToken() :返回從當前位置到下一個分隔符的字符串。

5. Object nextElement() :結果同4。

6. String nextToken(String delim) :與4類似,以指定的分隔符返回結果。


二、split 與 StringTokenizer 的小小區別


import java.util.StringTokenizer;
public class StringTokenizerDemo
{
   public static void main(String args[])
  {
      String str="100|66,55:200|567,90:102|43,54";
      String abc="A|B|C|D";
      StringTokenizer strToke=new StringTokenizer(str,":");//默認不打印分隔符
      //StringTokenizer strToke=new StringTokenizer(str,":",true);//打印分隔符
      //StringTokenizer strToke=new StringTokenizer(str,":",false);//不打印分隔符
      int size=strToke.countTokens();//3 & 5
      System.out.println("strToke count = "+size);
     while(strToke.hasMoreElements())
    {
       System.out.println(strToke.nextToken());
       //System.out.println(strToke.nextElement()); //效果同上
     }
     //String[] str_abc=str.split("\\|");//結果與StringTokenizer一樣
     String[] str_abc=str.split("|");//得到不同的結果
     for(int i=0;i<str_abc.length;i++)
     {
        System.out.println(str_abc[i]);
     }
  }
}


以上代碼說明:同樣是分割字符串,對於String.split()方法來說,
直接傳入參數"|"不能正確的分割字符串,需先對它進行轉義。
而對於StringTokenizer類來說,就沒有這個必要。

同樣的操作在遇到下列分割符時同樣需要:
"+"、"*"、"$"、"\"。
具體原因看第三節。

三、爲什麼不鼓勵使用StringTokenizer。

首先在JAVA 5,6,7中,它不是deprecated的。

從javadoc上看到:
StringTokenizer的是一個被保留,是因爲兼容性的原因,不鼓勵使用在新的代碼中。建議任何人都尋求這種功能使用split或java.util.regex包。

如果你把split和StringTokenizer作比較區別的String.Split()使用正則表達式,而StringTokenizer的只是使用逐字分裂的字符。這是第二節出現結果的原因。所以,如果我想更復雜的邏輯比單個字符(如\ r \ n分割來標記一個字符串,可以不使用StringTokenizer,而用String.Split() 。
發佈了46 篇原創文章 · 獲贊 31 · 訪問量 42萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章