Ich versuche, zwei Funktionen escape(text, delimiter)
und unescape(text, delimiter)
mit den folgenden Eigenschaften zu schreiben:Was ist der einfachste Algorithmus, um ein einzelnes Zeichen zu entkommen?
Das Ergebnis
escape
nichtdelimiter
enthält.unescape
ist die Umkehrung derescape
, das heißtunescape(escape(text, delimiter), delimiter) == text
für alle Werte von
text
unddelimiter
Es ist OK, um die zulässigen Werte von delimiter
zu beschränken.
Hintergrund: Ich möchte ein Trennzeichen getrennte Zeichenfolge von Werten erstellen. Um die gleiche Liste wieder aus der Zeichenfolge extrahieren zu können, muss ich sicherstellen, dass die einzelnen, getrennten Zeichenfolgen das Trennzeichen nicht enthalten.
Was ich versucht: ich mit einer einfachen Lösung (Pseudo-Code) kam:
escape(text, delimiter): return text.Replace("\", "\\").Replace(delimiter, "\d")
unescape(text, delimiter): return text.Replace("\d", delimiter).Replace("\\", "\")
aber entdeckt, dass Eigenschaft 2 "\d<delimiter>"
auf dem Test-String ist fehlgeschlagen. Derzeit habe ich folgende Arbeitslösung
escape(text, delimiter): return text.Replace("\", "\b").Replace(delimiter, "\d")
unescape(text, delimiter): return text.Replace("\d", delimiter).Replace("\b", "\")
, die, so lange zu arbeiten scheint, als delimiter
ist nicht \
, b
oder d
(was in Ordnung ist, will ich nicht sowieso diejenigen, die als Trennzeichen verwenden). Da ich seine Richtigkeit jedoch nicht formal bewiesen habe, befürchte ich, dass ich einige Fälle übersehen habe, in denen eine der Eigenschaften verletzt wurde. Da dies ein so häufiges Problem ist, gehe ich davon aus, dass es bereits einen "altbewährten" Algorithmus gibt, daher meine Frage (siehe Titel).
Escaping? Zuverlässig, einfach und schnell? Lol. – Will
Was ist das Problem mit zuverlässiger, einfacher und schneller Flucht? –