coldfusion - 在文本文档中查找配对值的最有效方法是什么
问题描述
给定以下文本:
<Cfsavecontent variable="testString">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum</Cfsavecontent>
并给出以下数组:
<Cfset pairs = [['ipsum','/bla'],['nisi','/alb']]>
如何替换第一个数组项并将它们替换为文本中的第二个数组项。
输出应该是:Lorem /bla dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris /alb ut aliquip ex ea commodo consequat。Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur。Exceptioneur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est labourum
我可以做一个简单的 cfloop 并一个一个地搜索数组项,但这不是很有效。有没有更好的方法来处理这个问题。
这是一个非常简单的例子。实际数组将包含 500 多个关键字,需要在大约 20.000 多个文本文档中进行搜索和替换。
解决方案
替换还不错,因为您还可以轻松匹配子字符串。如果您只需要替换由空格包围的单词,请考虑迭代每个单词并匹配要替换的对的哈希映射。
<cfsavecontent variable="testString">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum
</cfsavecontent>
<!--- case insensitive: use a case ignoring ColdFusion struct --->
<cfset pairs = {
"ipsum": "/bla",
"nisi": "/alb"
}>
<!--- case sensitive: use a case aware Java HashMap --->
<!---
<cfset pairs = createObject("java", "java.util.HashMap").init()>
<cfset pairs.put("ipsum", "/bla")>
<cfset pairs.put("nisi", "/alb")>
--->
<cfset words = listToArray(testString, " ")>
<cfset wordCount = arrayLen(words)>
<cfloop from="1" to="#wordCount#" index="i">
<cfif structKeyExists(pairs, words[i])>
<cfset words[i] = pairs[ words[i] ]>
</cfif>
</cfloop>
<cfset replacedTestString = arrayToList(words, " ")>
<cfoutput>#replacedTestString#</cfoutput>
推荐阅读
- html-agility-pack - li里面的html敏捷包文本
- javascript - 检查多个复选框时如何显示div?
- javascript - 我需要这些图像有链接我做错了什么?
- python - 调用外部程序停止我的脚本
- scala - 带空格的突触火花选择列
- python - 从 Flask 中的 post 请求运行类函数
- mule - 从 Payload 读取内容并在 Mule 电子邮件连接器中发送电子邮件
- android - 有没有办法根据应用程序主题更改启动画面之前出现的空白屏幕颜色?
- sql - 引号:发生了语法错误。SQLCODE=-201
- mysql - 服务器消失后如何在 MySQL 中继续导入 .sql 数据库