Java中StringTokenizer类与String.split方法的性能

在我的软件中,我需要将字符串拆分为单词。我目前有超过19,000,000个文档,每个文档都超过30个字。


以下两种方法中的哪一种是执行此操作的最佳方法(就性能而言)?


StringTokenizer sTokenize = new StringTokenizer(s," ");

while (sTokenize.hasMoreTokens()) {

要么


String[] splitS = s.split(" ");

for(int i =0; i < splitS.length; i++)


回首忆惘然
浏览 966回答 3
3回答

跃然一笑

在Java 7中拆分只是为该输入调用indexOf,请参阅参考资料。拆分应该非常快,接近indexOf的重复调用。

皈依舞

就我所知,另一个未记录的重要事情是,要求StringTokenizer返回定界符以及带标记的字符串(通过使用构造函数StringTokenizer(String str, String delim, boolean returnDelims))还可以减少处理时间。因此,如果您正在寻找性能,我建议您使用类似以下的方法:private static final String DELIM = "#";public void splitIt(String input) {&nbsp; &nbsp; StringTokenizer st = new StringTokenizer(input, DELIM, true);&nbsp; &nbsp; while (st.hasMoreTokens()) {&nbsp; &nbsp; &nbsp; &nbsp; String next = getNext(st);&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(next);&nbsp; &nbsp; }}private String getNext(StringTokenizer st){&nbsp;&nbsp;&nbsp; &nbsp; String value = st.nextToken();&nbsp; &nbsp; if (DELIM.equals(value))&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; value = null;&nbsp;&nbsp;&nbsp; &nbsp; else if (st.hasMoreTokens())&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; st.nextToken();&nbsp;&nbsp;&nbsp; &nbsp; return value;&nbsp;&nbsp;}尽管getNext()方法引入了开销,但会为您丢弃定界符,但根据我的基准,它仍然快了50%。
打开App,查看更多内容
随时随地看视频慕课网APP