我一直在使用String
類的String[] split(String)
來分割給定分隔符的任何字符串,並且它工作正常。使用StringTokenizer和String.split()之間的區別?
但是,現在預計將重新考慮與StringTokenizer
相同的邏輯。但是使用其中一個的區別和好處是什麼。
此外,我覺得String[]
返回split()
在一次調用是非常有效的選擇比使用StringTokenizer
類的對象。
我一直在使用String
類的String[] split(String)
來分割給定分隔符的任何字符串,並且它工作正常。使用StringTokenizer和String.split()之間的區別?
但是,現在預計將重新考慮與StringTokenizer
相同的邏輯。但是使用其中一個的區別和好處是什麼。
此外,我覺得String[]
返回split()
在一次調用是非常有效的選擇比使用StringTokenizer
類的對象。
- >String.split()
和Pattern.split()
給你一個簡單的語法來做後者,但這基本上就是他們所做的一切。如果你想解析結果字符串,或者根據特定標記中途改變分隔符,他們將不會幫助你。
- >StringTokenizer
比String.split()
更具限制性,而且使用起來也有點煩瑣。它本質上是爲了抽出由固定子字符串分隔的令牌而設計的。由於這個限制,它的速度是String.split()
的兩倍。 (請參閱我的comparison of String.split()
and StringTokenizer
。)它也早於正則表達式API,其中String.split()
是其中的一部分。
從我的定時中,您會注意到String.split()
仍然可以在典型機器上以幾毫秒標記數千個字符串。另外,與StringTokenizer
相比,它具有以字符串數組的形式提供輸出的優勢,這通常是您想要的。如StringTokenizer
所提供的使用Enumeration
在大多數情況下也是「句法上的挑剔」。從這個角度來看,StringTokenizer
現在有點浪費空間,你也可以使用String.split()
。從這個鏈接
StringTokenizer從內存角度來看是否更輕?看起來像'split()'會增加大約2倍。 – Larsenal
它們處理字符串輸出的方式也有所不同。理論上,如果你的字符串以空格開頭(s)StringTokenizer忽略這些並返回第一個字符串,但是拆分功能會在返回的數組中創建一個空字符串。 –
看看在JavaDocs
的StringTokenizer是保留兼容性 原因,雖然它的使用是在新代碼氣餒的遺留類。建議 任何尋求此功能的人都使用字符串 或java.util.regex包的拆分方法。
下面的示例示出了如何String.split方法可以是 用於將字符串分解成它的基本標記:
String[] result = "this is a test".split("\\s"); for (int x=0; x<result.length; x++) System.out.println(result[x]);
+1 split()更清潔 –
String#split
接受一個正則表達式是否StringTokenizer
只是接受String
,通過該將分割字符串。您應該始終堅持String#split
,它比StringTokenizer更健壯。
閱讀this
的StringTokenizer是保留兼容性的原因,雖然它的使用是在新代碼氣餒的遺留類。建議任何尋求此功能的人使用String或java.util.regex包的拆分方法。
http://docs.oracle.com/javase/6/docs/api/java/util/StringTokenizer.html 說:
的StringTokenizer是保留兼容性的原因,雖然它的使用是在新代碼氣餒的遺留類。建議任何尋求此功能的人使用String或java.util.regex包的拆分方法。
所以我會說,不要改變它,並向建議重構它的人顯示該行。也許他們有舊信息或另一個很好的理由告訴你。
這裏
答案是鏈路應答(從我的角度來看)的問題:http://lavnish.blogspot.com/2008/05/stringsplit-vs-stringtokenizer.html
我有以下程序,
字符串「X」是一個標籤分開 12s34;
public class Testoken {
public static void main(String[] args) {
String x = "1 2 s 3 4 ";
StringTokenizer st = new StringTokenizer(x,"\t");
int i = 0;
while(st.hasMoreTokens()){
System.out.println("token-->"+st.nextToken());
i++;
}
System.out.println("i-->"+i);//elements from tokenizer
String [] a = x.split("\t");
System.out.println("length--->"+a.length);
for(int y = 0;y<a.length;y++){
System.out.println("value-->"+a[y]);//elements from split
}
}
}
Output:
token-->1
token-->2
token-->s
token-->3
token-->4
i-->5
length--->8
value-->1
value-->2
value-->s
value-->
value-->3
value-->
value-->
value-->4
輸出: 令牌 - > 1 令牌 - > 2 令牌 - >取值 令牌 - > 3 令牌 - > 4 I - > 5 長度---> 8 值 - - > 1個 值 - > 2 值 - >取值 值 - > 值 - > 3 值 - > 值 - > 值 - > 4 – user2114253
參見本:http://stackoverflow.com/questions/691184/scanner-vs-stringtokenizer-vs-string-split – Jhanvi
的StringTokenizer很少使用這些天。我會看看Scanner。 –