2015-09-14 29 views
3

鑑於形式的字符串:StringTokenizer的不查看選項卡( 「 t」 的)爲空白( 「\ S +」)

String myStr = "5.1\t3.5\t1.4\t0.2\t0.0"; 

如果我稱之爲:

StringTokenizer token = new StringTokenizer(myStr, "\\s+"); 
String firstElement = token.nextToken(); 

firstElement然後等於整個字符串。相反,如果我撥打:

StringTokenizer token2 = new StringTokenizer(myStr); 
String firstElement = token2.nextToken(); 

firstElement等於「5.1」。同樣如果我使用String split如下:

String[] splitArray = myStr.split("\\s+") 
String firstElement = splitArray[0]; 

then,firstElement是「5.1」。

我知道StringTokenizer不鼓勵使用,並被歸類爲「遺留類」。我的意圖是理解Split和StringTokenizer之間爲什麼相同的分隔符有不同的作用。我會期待第一個例子像後兩個一樣工作,但由於某種原因,它跳過了標籤。任何指導我缺少什麼將不勝感激。

注意我在Eclipse的OSX上運行1.7.0_19,但我不希望這些變量在這裏有效。

回答

3

StringTokenizer不使用正則表達式作爲分隔符。該參數是一個包含分隔符字符列表的字符串。

構造函數StringTokenizer(String)StringTokenizer(String, "\t\n\f\r")相同,因此它適用於您的字符串。

+0

的StringTokenizer與「\\ s +」的使用基於這個Ha來自MapR的doop教程。我認爲這是錯誤的。 https://www.mapr.com/blog/how-write-mapreduce-program#.VfZblvlVhBc – ZaydH

1

的StringTokenizer:它使用分隔符爲可包含的分隔符列表而不是regex

enter image description here

分割字符串:它使用分隔符爲regex

enter image description here

+0

對於像我這樣對正則表達式不太瞭解的人,我覺得這很有幫助。 http://www.vogella.com/tutorials/JavaRegularExpressions/article.html – ZaydH

相關問題