2010-02-12 277 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作为