我必须以最快的方式拆分一个非常大的字符串,并且根据我所做的研究,我将其缩小到 2 种可能性:
1. Pattern.compile("[delimiter]").split("[large_string]");
2. 遍历StringBuilder
并调用substring
StringBuilder sb = new StringBuilder("[large_string]");
ArrayList<String> pieces = new ArrayList<String>();
int pos = 0;
int currentPos;
while((currentPos = sb.indexOf("[delimiter]", pos)) != -1){
pieces.add(sb.substring(pos, currentPos));
pos = currentPos+"[delimiter]".length();
}
感谢任何帮助,我将对它们进行基准测试,但我对理论部分更感兴趣:为什么一个比另一个快。
此外,如果您有其他建议,请发布它们。
更新:正如我所说,我已经完成了基准测试,生成了 5 百万个字符串,每个字符串有 32 个字符,它们被放入一个由以下分隔的字符串中~~
:
StringBuilder
令人惊讶的是,该方法是最慢的,平均为2.50-2.55 sec
Pattern.compile.split
以 avg 排名第二2.47-2.49 sec
Splitter
番石榴是无可争议的赢家,平均1.12-1.18 sec
时间是其他人的一半(特别感谢fge提出的建议)
谢谢大家的帮助!