gpt4 book ai didi

java - 如何优化java中的 "replaceFirst"方法

转载 作者:行者123 更新时间:2023-12-01 14:15:03 26 4
gpt4 key购买 nike

我使用httpclient来抓取html。在我的代码中,我发现

html = html.replaceFirst("[cC][hH][aA][rR][sS][eE][tT]\\s*?=\\s*?([gG][bB]2312|[gG][bB][kK]|[gG][bB]18030)","charset=utf-8");

以上代码导致java.lang.OutOfMemoryError。程序总使用251MB,replaceFirst方法使用64.8%,157MB,并且还在增长。我怎样才能避免这种情况,我需要一些帮助。嗯~

最佳答案

第一点是:不要使用正则表达式进行 HTML 解析。请改用 HTML 解析器。其次,如果您已经有了这个模式并且只是想稍微修复它,请尝试了解它的作用。

它实际上使用非常不优化的方式将 charset=GBK2312charset=GBK18030 替换为 charset=UTF-8

因此,首先将您的正则表达式更改为以下内容:

字符集=GBK(?:2312|18030)

我相信这已经给你带来了一些优势。但这个正则表达式是区分大小写的。无需手动以小写和大写形式编写每个字符,而是直接使用 Pattern :

Pattern p = Pattern.compile("charset=GBK(?:2312|18030)", Pattern.CASE_INSENSITIVE);
String newHtml = p.matcher(oldHtml).replaceFirst("charset=utf8");

关于java - 如何优化java中的 "replaceFirst"方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18181009/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com