我在Java代码中有以下正则表达式,在某些情况下需要花费大量时间才能完成。有没有办法改善它?
[{
"name": "sonia",
"emails": [{
"email": "abc@gmail.com",
"type": "Work"
}, {
"email": "xyz@gmail.com",
"type": "office"
}]
}]
导致问题的字符串:
Micro-Induction Cooktop提供最佳的灶具性能,安全性和效率。当电流流过线圈以在陶瓷板下产生磁场时,感应加热。当将铁磁炊具放置在陶瓷表面上时,在炊具中感应出电流,并且由于锅的阻力而产生瞬间热量。仅向锅产生热量并且不会损失热量。由于没有明火,导入装置比传统燃烧器更安全。一旦炊具被移除,所有分子活动停止并立即停止加热。内置或独立应用的清洁表面双功能:Cook和Warm7功率设置(100-300-500-700-900-1100-1300W)* 2最低功率设置实际上无法实现,但是“模拟”:100W = 500W间歇加热2秒,停止8秒300W = 500W间歇加热6秒,停止4秒13保温设置(100-120-140- 160-180-190-210-230-250-280-300-350-390F)带控制锁的触摸敏感面板最多8小时计时器微晶陶瓷板自动平底锅检测LED面板CEL / ETL-卫生/ FCC认证适用于家庭或商业用途家用电器仓库保护计划:
答案 0 :(得分:1)
假设你的_data
很长,那不是匹配时间,而是分配
_data = _data.replaceAll("\\Q" + m.group(0) + "\\E", ".");
就字符串长度而言O(n**2)
。只是不要这样做。
你可以用
更简单_data = _data.replace(m.group(0), ".");
但是不要这样做。你最后需要减少_data
吗?如果是这样,每个模式使用一个replaceAll
(它在内部使用StringBuffer
,并且只是字符串大小的线性)。
此外:
Matcher
和reset(CharSequence)
usePattern(Pattern)
decimal
可能会变慢。离开可选部分,你得到的"([0-9]+)+"
可以不必要地回溯。考虑使用原子组。