我正在尝试编写两个函数escape(text, delimiter)
并unescape(text, delimiter)
具有以下属性:
结果
escape
不包含delimiter
。unescape
是 的倒数escape
,即unescape(escape(text, delimiter), delimiter) == text
text
对于和的所有值delimiter
可以限制 的允许值delimiter
。
背景:我想创建一个以分隔符分隔的值字符串。为了能够再次从字符串中提取相同的列表,我必须确保单独的分隔字符串不包含分隔符。
我试过的:我想出了一个简单的解决方案(伪代码):
escape(text, delimiter): return text.Replace("\", "\\").Replace(delimiter, "\d")
unescape(text, delimiter): return text.Replace("\d", delimiter).Replace("\\", "\")
但发现属性 2 在测试字符串上失败"\d<delimiter>"
。目前,我有以下工作解决方案
escape(text, delimiter): return text.Replace("\", "\b").Replace(delimiter, "\d")
unescape(text, delimiter): return text.Replace("\d", delimiter).Replace("\b", "\")
这似乎有效,只要delimiter
is not \
, b
or d
(这很好,我不想将它们用作分隔符)。但是,由于我还没有正式证明它的正确性,恐怕我错过了一些违反其中一个属性的情况。由于这是一个常见的问题,我假设已经有一个“众所周知的证明正确”的算法,因此我的问题(见标题)。