为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

回首忆惘然 2019-12-21 13:18:09
在我的软件中,我需要将字符串拆分为单词。我目前有超过19,000,000个文档,每个文档都超过30个字。以下两种方法中的哪一种是执行此操作的最佳方法(就性能而言)?StringTokenizer sTokenize = new StringTokenizer(s," ");while (sTokenize.hasMoreTokens()) {要么String[] splitS = s.split(" ");for(int i =0; i < splitS.length; i++)
查看完整描述

3 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

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


查看完整回答
反对 回复 2019-12-21
?
皈依舞

TA贡献1851条经验 获得超3个赞

就我所知,另一个未记录的重要事情是,要求StringTokenizer返回定界符以及带标记的字符串(通过使用构造函数StringTokenizer(String str, String delim, boolean returnDelims))还可以减少处理时间。因此,如果您正在寻找性能,我建议您使用类似以下的方法:


private static final String DELIM = "#";


public void splitIt(String input) {

    StringTokenizer st = new StringTokenizer(input, DELIM, true);

    while (st.hasMoreTokens()) {

        String next = getNext(st);

        System.out.println(next);

    }

}


private String getNext(StringTokenizer st){  

    String value = st.nextToken();

    if (DELIM.equals(value))  

        value = null;  

    else if (st.hasMoreTokens())  

        st.nextToken();  

    return value;  

}

尽管getNext()方法引入了开销,但会为您丢弃定界符,但根据我的基准,它仍然快了50%。


查看完整回答
反对 回复 2019-12-21
  • 3 回答
  • 0 关注
  • 1009 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信