- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用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=GBK2312
或 charset=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/
假设我有一个字符串 String link = "www.thisisalink.com/tick1=@tick1@&tick2=@tick2@&tick3=@tick3@&tick4=@tick4@
我试图转义仅在 内的 HTML我遇到的标签(不要问我这里面有没有逻辑) 我确实写了这个简短的程序,它工作正常,但我想跳到下一场比赛,而不实际添加 id="ProcessedTag"所以它不仅仅取代第
想象一个场景,您正在将 DNA 的碱基更改为其补码(A -> T,T -> A等) 如果我想在一行中执行此操作,只需一个替换命令(无论是 replaceFirst、replaceAll 等),我将如何
以下例程在 WIN XP x32、JAVA 版本 7 Update 9 和 WIN7 x64、JAVA 版本 6 Update 32 上的行为有所不同。 private int getNrOfMatc
假设我想用“zzz”替换字符串中第一次出现的“yyy”。 String.replaceFirst 似乎是一个完美的解决方案 str = str.repaceFirst("yyy", "zzz"); 但
嗨,我正在尝试编写代码来读取包含一首诗的文件。然后它将每行中的第一个“您”更改为“我们”。我一直在尝试使用replaceFirst()、replace()、replaceAll();然而,没有一个人能
scala > val a = (x:Int)=>x+1 res0: Int => Int = scala > val b = a.getClass b: Class[_ Int] = c
我正在尝试替换字符串的一部分。该部分包含一些特殊字符: #L(inches)=24# 我知道replaceFirst是正则表达式驱动的,但我似乎无法创建与字符串中的这部分匹配的正则表达式,有什么想法吗
我使用httpclient来抓取html。在我的代码中,我发现 html = html.replaceFirst("[cC][hH][aA][rR][sS][eE][tT]\\s*?=\\s*?([g
这个问题已经有答案了: Not able to replace all for dollar sign (4 个回答) 已关闭 3 年前。 我有一个字符串,我尝试用它替换第一次出现的 %s。 例如:
我有一个“余额”字符串,前面包含一个美元符号。我想修改这个标志,这样我就可以将刺痛转换为双倍,但我的代码不起作用。 这是我尝试过的: String balance = "$5.30"; balance
有什么方法可以让 .replaceFirst() 开始仅替换特定字符串之后的 a 吗?例如我知道正则表达式不能很好地处理 html,并且我的 html 文本由 1 个 h2 标题和一个段落组成。现在,
我有一个包含 xyaahhfhajfahj{adhadh}fsfhgs{sfsf} 的字符串。 现在我想用空格替换{string}。 我想用空替换大括号和其中的字符串。 我想为它使用 replaceF
我在使用 replaceFirst 时得到一个奇怪的 ArrayOutOfBoundsException: "this is an example string".replaceFirst("(^th
使用java,我尝试将某个字符串的出现替换为其他字符串。它在大多数情况下都有效。但有时特定的字符串在给定的内容中不会被替换。 当我使用indexOf方法搜索给定内容中的某个字符串时,我可以正确获取该字
在 Java 中,String 类提供了 3 种字符串替换方法,分别是 replace()、replaceFirst() 和 replaceAll(),本文将详细介绍它们的使用方法。 repla
好吧,我有一个在使用 string.replace() 时替换文本的方法,它可以工作,但是当我切换到 relpaceFirst() 时,如下所示,它不再工作,我在这里做错或遗漏了什么? private
这个问题已经有答案了: Why does replaceAll fail with "illegal group reference"? (8 个回答) 已关闭 5 年前。 我尝试在执行restTem
因此,我需要返回修改后的字符串,其中它用另一个 token 替换 token 的第一个实例,同时跳过注释。这是我正在讨论的示例: This whole quote is one big String
当我这样做的时候 String s = "2r2"; System.out.println(s.replaceFirst("2r2","4")); 它有效,打印 4,但是当我这样做时 String s
我是一名优秀的程序员,十分优秀!