2013-02-08 51 views
4

免責聲明:這是理論問題,目的是增加我的理解。我知道我總是可以使用像JSON庫這樣的工具來解決問題。什麼是最簡單(且正確)的轉義算法?

假設我想創建一個逗號分隔的值列表,它們本身可能包含逗號。這些逗號需要先逃脫。假設我使用.作爲轉義字符,那麼["a", "b,c"]變成a,b.,c

但是,如果值的一個最初包含一個.,序列,然後我們需要那些之前逃跑逃避逗號。所以[ "a", "b.,c" ]變成a,b..,c

但是,如果其中一個值最初包含..,序列,那麼在轉義逗號前之前,我們需要跳過那些。所以[ "a", "b..,c" ]變成a,b...,c

但是,如果其中一個值最初包含...,序列,那麼在轉義逗號前之前,我們需要跳過那些。所以[ "a", "b...,c" ]變成a,b....,c

等...

解碼過程必須執行反向遞歸。

但是,我懷疑如果我太努力了,並有一個更簡單的方法。有一種更簡單的方法嗎?

+2

爲什麼你覺得那太複雜了?找到一個轉義字符,檢查它後面的內容,根據這個做一個動作,重複。 – mmgp 2013-02-08 20:22:16

+0

你是什麼意思「簡單?」這似乎具有內在的主觀性。 – templatetypedef 2013-02-08 20:24:19

+0

首先,希望人們離開這個網站去弄清楚你要問的並不是通常的工作方式(如果因爲某種原因不在場外的位置,你的問題就變得毫無意義)。其次,由於您有工作代碼,並且您正在尋求改進,所以這確實屬於[CodeReview](http://codereview.stackexchange.com)。 – 2013-02-08 20:24:41

回答

4

由於@mkbeckish」的評論,我意識到,該算法可以作爲實現:

// encoding 
text.replace(escape, escape + escape); 
text.replace(delim , escape + delim); 

// decoding 
text.replace(escape + delim , delim); 
text.replace(escape + escape, escape); 

Example implementation.

這是愚蠢的,我並沒有意識到這一點自己..

+0

我不認爲這涵蓋了您的問題中顯示的多個值的存儲。例如,你可以將'[「a」,「b,」]'編碼到''a,b。,''中,但是如果你只是簡單地對''進行字符串分割,接着是解碼算法,會得到'[「a」,「b。」,「」]'。如果先進行解碼,然後再進行字符串分割,則會得到'[「a」,「b」,「」]'。 – Sam 2013-12-12 23:03:35

+0

@Sam你如何編碼'[「a」,「b,」]'到''a,b。,''? – StackedCrooked 2013-12-12 23:36:45

+0

對不起,我想我用了錯誤的詞。我指的是編碼數組中的每個字符串,然後使用逗號加入結果的過程,如問題的第一個示例中所示。 – Sam 2013-12-12 23:38:57

相關問題