Java 文本替换效率

Java 文本替换效率,java,string,performance,Java,String,Performance,对我上一个问题的扩展: 我正在清理这个传入的文本,它来自一个包含不规则文本的数据库。这意味着,没有标准或规则。有些包含诸如®、&trade、<之类的HTML字符,而另一些则以这种形式出现:”、–等。其他时候,我只会使用获取HTML标记 我使用String.replace替换字符的含义(这应该可以,因为我使用的是UTF-8,对吗?),并使用replaceAll()删除带有正则表达式的HTML标记 除了为每次替换调用一次replace()函数并编译HTML标记正则表达

对我上一个问题的扩展:

我正在清理这个传入的文本,它来自一个包含不规则文本的数据库。这意味着,没有标准或规则。有些包含诸如®、&trade、<之类的HTML字符,而另一些则以这种形式出现:”、–等。其他时候,我只会使用<和>获取HTML标记

我使用String.replace替换字符的含义(这应该可以,因为我使用的是UTF-8,对吗?),并使用replaceAll()删除带有正则表达式的HTML标记


除了为每次替换调用一次replace()函数并编译HTML标记正则表达式之外,还有什么建议可以使此替换更有效吗?

使用replace with replaceAll会遇到性能瓶颈

如果你想提高性能

  • 不要使用替换-字符串是不可变的。将在每次调用replace时创建副本
  • 不要使用正则表达式(replaceAll)——尽管编译起来没有那么糟糕
  • 使用StringBuilder分析并替换您自己的字符串
  • 您这边的一些代码可能有助于讨论

    String str = ...
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < str.length(); i++) {
      char toAppend = 'a';
      switch (str.charAt(i)) {
         case '&' : toAppend = '&'; break;
         case ...
          ...
          default: toAppend = str.charAt(i);
        }
       sb.append(toAppend);
      }
    
    String str=。。。
    StringBuilder sb=新的StringBuilder();
    对于(int i=0;i

    这来自:

    我的第一个建议是测量最简单的方法的性能(可能是多个replace/replaceAll调用)。是的,这可能是低效的。通常最简单的方法是效率低下的。你需要问自己:你有多在乎?

    您是否有样本数据和性能可接受的阈值?如果你没有,那是第一个呼叫端口。然后测试这个幼稚的实现,看看它是否真的是一个问题。(请记住,字符串替换几乎肯定只是您所做工作的一部分。当您从数据库获取文本时,这很可能最终成为瓶颈。)


    一旦你确定替换是真正的瓶颈,就有必要进行一些测试,看看替换的哪些部分是造成最大问题的——听起来你在做几种不同类型的替换。越是缩小范围越好:您可能会发现,最简单代码中真正的瓶颈是由一些很容易以合理简单的方式提高效率的东西造成的,而试图优化所有内容则要困难得多。

    字符串替换是Java非常慢,我认为您应该使用更快的语言

    这里有一个如何在程序集中替换字符串的代码示例


    +1因为您是对的,尽管添加到35k似乎是错误的。它将在哪里结束…?@SteveB:你会很高兴听到在一天中的这个时候投票给我对我的代表没有影响。