2016-10-18 62 views
4

我有一個stringTokenizer設置,我想爲它的另一個進程的副本。有沒有辦法做到這一點? 我的代碼:stringTokenizer的克隆值java

StringTokenizer itr = new StringTokenizer(theBigString); 
itr.nextToken(); 
// My goal is to get a new StringTokenizer after the first token 
//StringTokenizer itrCopy = new StringTokenizer(itr.toString()); 

有沒有辦法得到這個工作?

+1

正如@SergeyTachenov所說,使用StringTokenizer是一種壞主意。你想達到什麼目的?也許你可以通過將其他進程傳遞給原始字符串的子字符串來實現,例如:'theBigString.substring(0,theBigString.indexOf(「tokenSeparator」))'然後在另一個實例化新字符串的StringTokenizer處理。 – walen

+0

@walen謝謝配偶。我知道如何將它與分割和子字符串一起使用,只是想知道是否有一種方法可以用stringTokenizer來完成。該文檔沒有任何東西 – suman

回答

2

這可能不是回答你的問題完全是,但是,報價StringTokenizer docs

的StringTokenizer是保留兼容性 原因,雖然它的使用是在新代碼氣餒的遺留類。建議 任何尋求此功能的人都使用字符串 或java.util.regex包的拆分方法。

不幸的是,這並沒有提到確切的爲什麼它是不鼓勵的。原因是,您必須將整個字符串加載到內存中才能使用StringTokenizer,這意味着您的內存不受限制,爲什麼不使用split?幾乎所有今天使用StringTokenizer的唯一原因是當您將returnDelims設置爲true(如果不同的分隔符對您意味着不同的事情),因爲您無法使用split來完成此操作。

如果你還有一些理由使用StringTokenizer,那麼你在這裏有一個嚴重的問題。 StringTokenizer不是Serializable,你不能從它繼承,並使它Serializable因爲它沒有void構造函數。這意味着你唯一的方法是使用反射,可能與一些第三方序列化庫,可能序列化爲XML/JSON。但缺少構造函數可能會限制你的選擇。反序列化時,必須首先用一些虛擬字符串構造標記器,然後通過反射設置它的字段。

+0

感謝隊友的答案。我只是想了解是否有辦法做到這一點。我結束了使用拆分方法。 – suman