Есть ли лучший способ избежать этой строки? - PullRequest
2 голосов
/ 19 июня 2009

Какой самый быстрый способ в 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 ]

14 голосов
/ 19 июня 2009

Я не проверял это, поэтому синтаксис может быть отключен, но вы должны быть в состоянии сделать что-то вроде:

<cfset V1 = REReplace(V1,"([0-9]{2})","\\\1","all")>
2 голосов
/ 20 июня 2009

В Java вы могли бы сделать

String text = text.replaceAll("(..)","\\\1");
1 голос
/ 20 июня 2009

Вот еще один возможный способ.

<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>
0 голосов
/ 20 июня 2009

Я не знаю 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();
}
0 голосов
/ 20 июня 2009

как насчет ...

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

<cfloop from="1" to="#len(input)#" index="count" step="2">
   <cfset output &= "\" & mid(input, count, 2)>
</cfloop>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...