【问题标题】:Cloning value of a stringTokenizer javastringTokenizer java的克隆值
【发布时间】:2016-10-18 01:37:53
【问题描述】:

我设置了一个 stringTokenizer,我想为另一个进程复制它。有没有办法做到这一点? 我的代码:

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());

有什么办法可以解决吗?

【问题讨论】:

  • 正如@SergeyTachenov 所说,使用 StringTokenizer 是个坏主意。你想达到什么目的?也许您可以通过将原始字符串的子字符串传递给该其他进程来做到这一点,如下所示:theBigString.substring(0, theBigString.indexOf("tokenSeparator")) 然后在其他进程中为该新字符串实例化一个新的 StringTokenizer。
  • @walen 谢谢伙计。我知道如何将它与拆分和子字符串一起使用,只是想知道是否有办法使用 stringTokenizer。文档没有任何内容

标签: java string stringtokenizer


【解决方案1】:

这可能无法准确回答您的问题,但是,引用 StringTokenizer docs

StringTokenizer 是为了兼容性而保留的遗留类 原因尽管在新代码中不鼓励使用它。推荐 任何寻求此功能的人都使用 String 的 split 方法 或 java.util.regex 包。

不幸的是,这并没有确切地说明为什么不鼓励这样做。原因是,无论如何您都必须将整个字符串加载到内存中才能使用StringTokenizer,这意味着您并没有受到严重的内存限制,那么为什么不使用split?几乎今天使用StringTokenizer 的唯一原因是当您将returnDelims 设置为true(如果不同的分隔符对您来说意味着不同的事情),因为您无法使用split 做到这一点。

如果你还有理由使用StringTokenizer,那么你的问题就很严重了。 StringTokenizer 不是 Serializable,你不能从它继承并使其成为 Serializable,因为它没有 void 构造函数。这意味着您唯一的方法是使用反射,可能使用一些 3rd 方序列化库,可能将其序列化为 XML/JSON。但是缺少默认构造函数也可能会限制您在这里的选择。反序列化时,您必须先使用一些虚拟字符串构造标记器,然后通过反射设置其字段。

【讨论】:

  • 感谢朋友的回答。我只是想了解是否有办法做到这一点。我最终使用了 split 方法。
猜你喜欢
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 2015-04-14
  • 2012-05-07
相关资源
最近更新 更多