Java 拆分字符串性能

2022-08-31 19:51:10

以下是我的应用程序中的当前代码:

String[] ids = str.split("/");

分析应用程序时,字符串拆分花费的时间不可忽略不计。此外,该方法采用正则表达式,这在这里是多余的。split

我可以使用什么替代方法来优化字符串拆分?速度更快吗?StringUtils.split

(我本来会尝试并测试自己,但分析我的应用程序需要花费大量时间。


答案 1

String.split(String)不会创建正则表达式,如果你的模式只有一个字符长。当按单个字符拆分时,它将使用非常有效的专用代码。 在这种特殊情况下,速度不会快多少。StringTokenizer

这是在OpenJDK7 / OracleJDK7中引入的。下面是一个错误报告一个提交。我在这里做了一个简单的基准测试


$ java -version
java version "1.8.0_20"
Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)

$ java Split
split_banthar: 1231
split_tskuzzy: 1464
split_tskuzzy2: 1742
string.split: 1291
StringTokenizer: 1517

答案 2

如果你可以使用第三方库,Guava的Splitter在你不要求它的时候不会产生正则表达式的开销,并且作为一般规则非常快。(披露:我为番石榴做出贡献。

Iterable<String> split = Splitter.on('/').split(string);

(此外,通常比 .SplitterString.split