2009-06-19 4 views
2

Что это самый быстрый способ в ColdFusion (или Java) для преобразования строки как таковой:Есть ли лучший способ избежать этой строки?

Input: 
79827349837493827498 

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

Я принимает GUID LDAP и избежать его запроса.

я могу сделать это как ряд сокращений MID, как это:

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

Но, похоже, было бы что-то более изящное, как регулярное выражение замены.

ответ

14

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

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

спасибо. Именно то, что я искал. Я просто понял, что в моих примерах нет символов, но LDAP Guid делает. Поэтому регулярное выражение должно быть ближе к (\ w {2}). –

0

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

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

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

В Java вас может сделать

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

Это именно то, что вы могли бы сделать в ColdFusion. Но я верю, что это: .replaceAll ("(..)", "\\ $ 1"). Обратные ссылки Java работают со знаком доллара. – Tomalak

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(); 
} 
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> 
+0

круто, я думал, что вставить() не получится, но зацикливание работает! хороший! – Henry

+0

oh ... 'to' должно быть 1, не так ли? – Henry

+0

Нет, 'to' должно быть 0, потому что параметр позиции функции insert() 0 префикс строки. – Jayson

Смежные вопросы