2016-10-18 37 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