有没有更好的方法来逃避这个字符串?

时间:2009-06-19 18:18:54

标签: java algorithm coldfusion

ColdFusion(或Java)中转换字符串的最快方式是什么:

Input:
79827349837493827498

Output:
\79\82\73\49\83\74\93\82\74\98

我正在使用LDAP GUID并将其转义为查询。

我可以将其作为一系列MID缩减来实现:

  <CFSET V1 = "">
  <CFSET RetVal = "">
  <CFLOOP CONDITION="#V1# NEQ''">
      <CFSET RetVal = RetVal & "\" & MID(V1,1,2)>
      <CFSET V1 = MID(V1,3,2000)>
  </CFLOOP>

但似乎会有更优雅的东西,比如正则表达式替换。

5 个答案:

答案 0 :(得分:14)

我没有对此进行测试,因此语法可能已关闭,但您应该可以执行以下操作:

<cfset V1 = REReplace(V1,"([0-9]{2})","\\\1","all")>

答案 1 :(得分:2)

在Java中你可以做到

String text = text.replaceAll("(..)","\\\1");

答案 2 :(得分:1)

这是另一种可能的方式。

<cfset input = "79827349837493827498"/>
<cfset output = input/>

<cfloop from="#len(output)-2#" to="0" index="i" step="-2">
    <cfset output = insert("\",output,i)/>
</cfloop>

<cfoutput>#output#</cfoutput>

答案 3 :(得分:0)

怎么样......

<cfset input = "79827349837493827490">
<cfset output = "">

<cfloop from="1" to="#len(input)#" index="count" step="2">
   <cfset output &= "\" & mid(input, count, 2)>
</cfloop>

答案 4 :(得分:0)

我不知道ColdFusion,但这是一个简单的Java方法:

private String injectBackslashes(String string) {
    StringBuffer sb = new StringBuffer();
    for(int i = 0; i < string.length() / 2; ++i)
        sb.append('\\').append(string.substring(2*i, 2*i+2));
    return sb.toString();
}