首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文本替换效率

文本替换效率
EN

Stack Overflow用户
提问于 2009-02-12 19:01:46
回答 3查看 3.8K关注 0票数 4

对我上一个问题的延伸:

文本清理和替换:从Java文本中删除\n

我正在清理这个传入的文本,它来自一个带有不规则文本的数据库。这意味着,没有任何标准或规则。有些包含HTML字符,比如,&trade,<,还有一些是以这样的形式出现的:“,-等等。

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

除了为每个替换调用replace()函数和编译HTML标记正则表达式之外,是否有任何建议来提高替换的效率?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-02-12 19:23:32

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

您有样本数据和阈值,在什么时候性能是可以接受的?如果你不这样做,那是第一个停靠港。然后测试天真的实现,看看它是否真的是一个问题。(请记住,字符串替换几乎肯定只是您所做工作的一部分。当您从数据库中获取文本时,这很可能成为瓶颈。)

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

票数 8
EN

Stack Overflow用户

发布于 2009-02-12 19:18:21

如果使用replaceAll替换,您将遇到性能瓶颈。

如果你想提高性能

  1. 不要使用替换-字符串是不可变的。将在每次调用替换时创建副本。
  2. 不要使用正则表达式(replaceAll) --尽管正在编译,但并没有那么糟糕。
  3. 使用StringBuilder解析和替换您自己的字符串

您端的一些代码可能有助于讨论。

代码语言:javascript
复制
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);
  }

这是来自:Sun论坛

票数 3
EN

Stack Overflow用户

发布于 2009-02-12 19:52:20

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

这里有代码示例,如何在程序集中替换字符串。

perl/替换-字符串程序集中-code.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/542770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档