相关疑难解决方法(0)

从Java String中删除所有不可打印字符的最快方法

StringJava中删除所有不可打印字符的最快方法是什么?

到目前为止,我已经尝试并测量了138字节,131个字符的字符串:

  • 字符串replaceAll()- 最慢的方法
    • 517009结果/秒
  • 预编译模式,然后使用匹配器 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(); …
Run Code Online (Sandbox Code Playgroud)

java string optimization performance micro-optimization

80
推荐指数
3
解决办法
2万
查看次数

C#正则表达式删除不可打印的字符,并控制字符,在一个混合了许多不同语言的文本中,unicode字母

我很感激你的帮助,因为我不知道要使用哪个字符范围,或者是否有像[[:cntrl:]]这样的字符类我在ruby中找到了?

通过不可打印的方式,我的意思是当打印输入字符串时删除所有未显示在输出中的字符.请注意,我寻找ac#regex,我的代码没有问题

c# regex unicode

14
推荐指数
2
解决办法
1万
查看次数