2010-02-12 88 views
-2

有沒有更好的方法來縮短(使用更少的字符)在J​​ava中的字符串,除了將字符轉換爲int並通過base36運行它們?縮短字符串

例如,假設我想縮短網址。

+3

縮短,你的意思是縮寫或重新編碼使用更少的字符? – joeslice 2010-02-12 05:19:03

+0

你在談論文本壓縮嗎? – LiraNuna 2010-02-12 05:20:30

+0

使用幾個字符 – Mark 2010-02-12 05:23:31

回答

2

由於URL的格式爲UTF-8,並且由於這些字符基於256,所以在基本32中編碼與整數代碼點相同的字符只能使它們變長。或者你是不是在問你聽到的是什麼?

此外,在Java字符串中基本是65536 UTF-16,因此將它們的代碼點編碼爲基本32將使Java字符串更長。

正如編碼二進制數據在基址64中使其長度增加4/3 - 每3個字節需要4個基本64字節進行編碼。

3

短URL服務(如'tinyurl')通過存儲一個大型數據庫表來工作,該表從短URL映射到完整表單。

當您請求一個tinyurl時,該服務會分配一個隨機看起來很短的url(目前未使用)並在其表中創建一個條目,將短url映射到您提供的較長url。

當您嘗試在瀏覽器中加載短url時,請求首先轉到tinyURL服務,該服務查找完整的URL,然後向瀏覽器發送一個HTTP重定向響應,告訴它轉到實際URL。

你可以通過做同樣的事情來實現你自己的URL縮短服務,但是如果你縮短了自己的URL,你可以在內部重定向到你的web服務器;例如使用一個servlet請求過濾器。

編輯:我以一種仍然允許解析URL的方式描述了這種縮短URL的方式。 (當你考慮它時,這是很重要的,如果你縮短了一個URL字符串,並且結果不再可以解析,那麼它就不再是一個有用的URL了。)

但是,這種方法也可以更普遍地使用;即通過創建一對Map<String,String>對象並使用順序生成的短串與原始(可能更長)的串之間的雙向映射來填充它。有可能證明,它將給出比相同的一組長字符串中的任何算法壓縮或編碼方案更小的短字符串的平均大小。

不足之處是存儲映射所需的空間,以及您需要映射到任何位置(例如在任何計算機上)的事實,您需要執行從短到長或從長到短的轉換。

+0

該問題與網址無關。 – glasnt 2010-02-12 05:57:23

+0

@TomatoSandwich他描述的技術可用於URL以外的任何其他內容 – David 2010-02-12 06:07:43

+1

@TomatoSandwich - 「例如,假如我想縮短網址」 - 雖然問題並未說明僅用於網址,但似乎它符合資格作爲針對我的。 – 2010-02-12 06:15:47

0

將數據庫中的全部網址和重定向URL的ID作爲