Java String split方法性能分析

本文揭示了Java String的split方法在不同分隔符下的行为:非正则表达式元字符性能最优。探讨了StringUtils.split与JDK原生split的对比,并指出性能受分隔符影响。关键在于选择简单的分隔符,如英文逗号,以提升性能。
摘要由CSDN通过智能技术生成
	近期笔者分析一段在线代码的性能时,发现Java String类中split()方法的性能和网上一些帖子的描述并不相同,是以记录澄清。

Java String split方法到底有没有使用正则表达式?

结论:
分隔符符合两种情况:(1) 单字符字符串,而且这个字符不是
正则表达式的元字符“$|()[{^?*+\\”。(2)两个字符字符串,第一个字符是反斜杠和第二个不是ascii数字或ascii字母。那么执行split方法不会使用正则表达式。其他情况下会使用正则表达式。
因此,显见地说,如果想要提高性能,分隔符的选择极其重要。最好使用单字符非正则表达式元字符,如英文逗号等。
源码示例

StringUtils.split(string,char)效率是不是比JDK原生的高?

	结论:
		不一定,关键还是看分隔符的选择。

测试代码
使用英文逗号“,”作为分隔符的情况:
在这里插入图片描述

使用英文"|"作为分隔符的情况:请注意箭头所指的耗时,比上一次测试用时更短,这是因为这次的分隔符在原字符串中不存在。
在这里插入图片描述
当使用数字1作为分隔符时,两种方法用时接近,而且随着原字符中和分隔符命中率增高,StringUtils的split方法用时明显在增加。
在这里插入图片描述

最后总结:

	1.jdk原生split方法性能很大程度上取决于分隔符的选择,如英文逗号,单个数字,单个字母,英文分号,英文冒号都能带来很好的性能表现。
	2.StringUtils的split的确在一些情况下,如分隔符在源字符串中不存在,分隔符属于正则表达式元字符等情况下,使用StringUtils的split会有更好的性能表现。
	3.但是,随着命中率增高StringUtils的split的性能曲线开始衰减,而jdk原生split方法则有比较稳定的表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值