简单的字符串替换规则集

时间:2013-06-22 22:57:53

标签: string algorithm replace

我有一个应用程序,用户通过填充一堆表示这些对象将采用的值的文本框来设置一堆对象。就像设置Person对象一样,要求您输入NameLastName属性。

现在我想介绍用户可以为其分配值的全局变量,或者在程序执行期间哪些值会发生变化。我希望用户在填充任何对象的属性时能够使用它们。我的第一个想法是选择一个标记变量名称开头的特殊字符,然后让用户两次使用该字符来表示字符本身。

例如,假设我有一个名为McThing的全局变量。然后,说我选择标记变量开头的符号是%。然后,用户可以输入一个人的姓氏字​​符串“Mc。%McThing”,然后我将使用McThing的值替换。如果McThing的值是“Donalds”,则姓氏将变为“Mc.Donalds”。

这个问题是,如果我有一个名为He的变量而另一个名为Hello,并且用户输入“%Hello”作为字符串我不知道哪个变量需要将被替代。例如,我可以将我的规则更改为使用“%”符号来标记变量名称的开头和结尾。但我不确定这是否会引起任何其他问题。

实现这一目标的最简单的一套规则是什么,这样用户就能够无歧义地表示每个可能的字符串?理想情况下,变量名称可以包含任何字符,但我可以将它们的名称限制为给定的字符集。

2 个答案:

答案 0 :(得分:0)

使用%标记开头和结尾的方法存在一个问题。如果输入字符串是%foo%%bar%会发生什么?我获得foo的值和bar的值吗?或者我得到foo%bar的值? (当然,如果不允许变量名中的%,则这不是问题。)

我能想到避免这个问题的最简单方法是在开头使用一个符号,为结尾使用另一个符号(例如#)。这应该避免任何歧义。如果用户想要文本中的#或变量名称,则会像下面那样逃避它:%#。这没有问题,因为空变量名不是一个东西(至少我希望不是)。

答案 1 :(得分:0)

在以下假设下实施将很好,很容易:

  • 您没有空的变量名称(例如,如果我们看到%%%还是空变量名称?)
  • 变量名称不能包含% s(即如果我们在变量名称中看到%,那么结尾还是%?)

    变量名称无法以% 开头或结尾,您不能连续使用2个变量名称
    (即%a%%b% = aba%b?)

这些假设将确保任何%%始终代表%个字符,任何%始终代表字符串的开头或结尾。

这些假设可能不一定是必需的,但至少它们会使实施变得更加困难(通过上述假设,我们永远不会看到超过1个字符)。

没有这种限制的替代,松散地基于C / Java /等的方式。做到了:

%在C / Java /等中扮演类似于\的角色。 - 使用:

  • %s表示字符串的开头
  • %e表示字符串的结尾
  • %%表示%字符

您也可以使用相同的字符来表示开头和结尾,但是,我们也可以使它们不同,以便更容易阅读。