7
从Java字符串中剥离所有不可打印字符的最快方法
String用Java剥离所有不可打印字符的最快方法是什么? 到目前为止,我已经尝试并测量了138字节,131个字符的字符串: 字符串的replaceAll()-最慢的方法 517009个结果/秒 预编译模式,然后使用Matcher的 replaceAll() 637836个结果/秒 使用StringBuffer,使用codepointAt()一对一获取代码点并追加到StringBuffer 711946结果/秒 使用StringBuffer,使用charAt()一对一获取字符并追加到StringBuffer 1052964结果/秒 预分配char[]缓冲区,使用charAt()一对一获取字符并填充该缓冲区,然后转换回String 2022653个结果/秒 预分配2个char[]缓冲区-旧的和新的,使用一次获取现有String的所有字符,一次又一次getChars()遍历旧缓冲区并填充新缓冲区,然后将新缓冲区转换为String-我自己最快的版本 2502502结果/秒 具有2个缓冲区的相同内容-仅使用byte[],getBytes()并将编码指定为“ utf-8” 857485结果/秒 具有2个byte[]缓冲区的相同内容,但将编码指定为常量Charset.forName("utf-8") 791076个结果/秒 具有2个byte[]缓冲区的相同内容,但是将编码指定为1字节本地编码(几乎没有理智的事情) 370164结果/秒 我的最佳尝试是: char[] oldChars = new char[s.length()]; s.getChars(0, s.length(), oldChars, 0); char[] newChars = new char[s.length()]; int newLen = 0; for (int j = 0; j < s.length(); j++) …