sto cercando di scrivere due funzioni escape(text, delimiter)
e unescape(text, delimiter)
con le seguenti proprietà:Qual è l'algoritmo più semplice per sfuggire a un singolo personaggio?
Il risultato di
escape
non contienedelimiter
.unescape
è il contrario dellaescape
, vale a direunescape(escape(text, delimiter), delimiter) == text
per tutti i valori di
text
edelimiter
E 'OK per limitare i valori consentiti di delimiter
.
Sfondo: Voglio creare una stringa delimitatore di valori separati. Per essere in grado di estrarre di nuovo la stessa lista dalla stringa, devo assicurarmi che le singole stringhe separate non contengano il separatore.
Quello che ho provato: mi si avvicinò con una soluzione semplice (pseudo-codice):
escape(text, delimiter): return text.Replace("\", "\\").Replace(delimiter, "\d")
unescape(text, delimiter): return text.Replace("\d", delimiter).Replace("\\", "\")
ma abbiamo scoperto che la proprietà non è riuscita 2 sulla stringa di prova "\d<delimiter>"
. Attualmente, ho il seguente soluzione di lavoro
escape(text, delimiter): return text.Replace("\", "\b").Replace(delimiter, "\d")
unescape(text, delimiter): return text.Replace("\d", delimiter).Replace("\b", "\")
che sembra funzionare, a patto che delimiter
non è \
, b
o d
(che va bene, non voglio usare quelli come delimitatori in ogni caso). Tuttavia, poiché non ho formalmente dimostrato la sua correttezza, temo di aver dimenticato alcuni casi in cui una delle proprietà è stata violata. Poiché questo è un problema così comune, presumo che ci sia già un algoritmo di "ben collaudato e corretto" per questo, quindi la mia domanda (vedi titolo).
Escaping? Affidabile, semplice e veloce? Lol. – Will
Qual è il problema con l'escape affidabile, semplice e veloce? –