2013-06-22 47 views
0

我有一個應用程序,用戶通過填充一堆表示這些對象將採取的值的文本框來設置一堆對象。就像設置一個Person對象一樣,需要輸入NameLastName屬性。簡單的字符串替換規則集

現在我想介紹一下用戶可以分配值的全局變量,或者在程序執行過程中哪些值會改變。我希望用戶能夠在填充任何對象的屬性時使用它們。我的第一個想法是選擇一個特殊字符來標記一個變量名的開頭,然後讓用戶使用兩次字符來表示字符本身。

例如,假設我有一個名爲McThing的全局變量。然後,說我選擇標記變量的開始的符號是%。用戶然後可以輸入一個人的姓氏字​​符串「Mc。%McThing」,然後我將使用McThing的值替換。如果McThing的值是「Donalds」,則姓將變成「Mc.Donalds」。

問題是,如果我有一個名爲He的變量,另一個名爲Hello,並且用戶輸入「%Hello」作爲字符串,我不知道哪個變量需要替換。例如,我可以將規則更改爲使用「%」符號標記變量名稱的開頭和結尾。但我不確定這是否會導致任何其他問題。

爲了達到這個目的,最簡單的規則集是什麼?這樣用戶就可以表示每個可能的字符串而沒有歧義?理想情況下,變量名稱可以具有任何字符,但我可以將其名稱限制爲給定的一組字符。

+1

'Mc。 %(McThing)' –

回答

0

你用%標記開始和結束的方法有一個問題。如果輸入的字符串是%foo%%bar%,會發生什麼情況?我能得到foo的值和bar的值嗎?還是我得到foo%bar的價值? (當然如果%在變量名中是不允許的,這不是問題。)

我能想到的最簡單的方法來避免這個問題是使用一個符號作爲開始和另一個符號(例如#)爲了結束。這應該避免任何含糊之處。如果用戶想要文本或變量名稱中的#,他可以這樣轉義它:%#。這不會引起任何問題,因爲空變量名稱不是問題(至少我不希望)。

0

它會沒事的,容易對假設以實施:

  • 你有沒有空的變量名稱(即,如果我們看到一個%%是一個%或空變量的名字嗎?)
  • 變量名稱不能含有% S(即,如果我們在一個變量名看%,是結束還是%?)
    OR
    變量名稱不能開始或結束與%你不能有一個連續的2個變量名稱
    (即是%a%%b% = aba%b?)

這些假設將確保任何%%總是呈現%字符,任何%始終代表開始或字符串的結尾。

這些假設可能不一定是必需的,但至少它們會使實現變得更加困難(通過上述假設,我們不需要看多於1個字符)。

替代沒有這樣的限制,鬆散地基於的方式C/Java /等。是否:

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

  • %s表示字符串
  • %e開始來表示字符串的結尾
  • %%來表示%字符

您也可以使用相同的字符代表開始和結束,但是,我們也可以讓它們不同,因此它更易於閱讀。