到目前为止,最快的实现是经过优化的简单Java实现,它将StringBuilder缓冲区预先分配到最大可能的结果长度,然后简单地向缓冲区添加不在“chars to delete”字符串中的字符。这避免了字符串>长度为16个字符(StringBuilder的默认分配)的任何重新分配,并避免了Lambda实现中从字符串副本中删除字符的“向左滑动”性能冲击。
下面的代码运行一个简单的基准测试,每个实现运行1,000,000次,并记录运行时间。
每次运行的准确结果都不同,但性能的顺序永远不变:
Start simple Java implementation
Time: 157 ms
Start Lambda implementation
Time: 253 ms
Start String.replace implementation
Time: 634 ms
String text = "removing a special character from a string";
int delete = 'e';
int[] arr = text.codePoints().filter( c -> c != delete ).toArray();
String rslt = new String( arr, 0, arr.length );