缩短字符串

时间:2010-02-12 05:17:06

标签: java

除了将字符串转换为int并通过base36运行它们之外,还有更好的方法可以缩短(使用更少的字符)java中的字符串吗?

例如,假设我想缩短网址。

3 个答案:

答案 0 :(得分:4)

短URL服务(如'tinyurl')通过存储从短URL映射到完整表单的大型数据库表来工作。

当您请求tinyurl时,该服务会分配一个随机查找的短网址(当前未使用)并在其表格中创建一个条目,该条目从短网址映射到您提供的较长网址。

当您尝试在浏览器中加载短网址时,请求首先转到tinyURL服务,该服务会查找完整的网址,然后向浏览器发送HTTP重定向响应,告知其转到真实网址。< / p>

您可以通过执行相同的操作来实现自己的URL缩短服务,但如果您缩短自己的URL,则可以在内部对Web服务器进行重定向;例如使用servlet请求过滤器。


我在缩短URL的上下文中描述了上述内容,其方式仍然允许解析URL 1 。但是,这种方法也可以更普遍地使用;即,通过创建一对Map<String,String>对象,并在顺序生成的短字符串和原始(可能更长)字符串之间使用双向映射填充它。 证明可以在同一组长字符串上提供比任何算法压缩或编码方案更小的短字符串平均大小。

缺点是存储映射所需的空间,以及您需要在任何地方(例如在任何计算机上)进行短到长或长到短转换的映射。< / p>

1 - 当你想到它时,这是至关重要的。如果缩短URL字符串并且结果不再可解析,则对于大多数用途来说,它不是有用的URL。

答案 1 :(得分:2)

由于URL是UTF-8,并且因为字符因此是256,所以在基本32中编码与整数代码点相同的字符只能使它们更长。或者你不是在问你听到的是什么?

此外,在Java Strings中基于65536 UTF-16,因此将它们的代码点编码为基数32将使Java字符串更长。

正如在base 64中对二进制数据进行编码使其延长4/3 - 每3个字节需要4个base 64字节进行编码。

答案 2 :(得分:0)

将完整的Url放在数据库中,并将id作为重定向URL