java短链接生成方法

这里列出两种短链接生成的方法供有需要的朋友参考。

方法一

这种方法的的缺点很明显。
1. 缺点一
必须指定短链接的长度(for循环的次数即是短链的长度)。一旦设置,如果占用满,将需要更改代码重新发布。不利于维护
2. 缺点二
会发现这个代码只是生成key,与本身要生成的链接没有任何关系,所以需要手动记录key与value的对应关系。比如记录到redis中。(其实个人并并不认为这是个缺点,短链接要考虑的一个场景就是过期)

private static final char[] BASE_62_CHARS = "abcdefghzjklmnopqrstuvwxyzABCDEFGHZJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
private static final int BASE_62_CHARS_LENGTH = BASE_62_CHARS.length;
public static String method1(){
    StringBuffer sb = new StringBuffer();
    Random random = new Random();
    for(int i = 0; i < 6; i++) {
        int index = random.nextInt(BASE_62_CHARS_LENGTH);
        sb.append(BASE_62_CHARS[index]);
    }
    return sb.toString();
}

方法二

这个是基于方法一的改进方法,主要修复的是缺点一。
引入了一个增量变量startIndex,每次生成后对该增量变量进行累计1,使用redis来存储startIndex是个很好的解决方案。
该方法同样存在缺点2。但是优点在设置了startIndex后,该代码不需要再维护,短链接的长度会随着startIndex的递增而增加。

private static final char[] BASE_62_CHARS = "abcdefghzjklmnopqrstuvwxyzABCDEFGHZJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
private static final int BASE_62_CHARS_LENGTH = BASE_62_CHARS.length;
public static void main(String[] args) {
    int startIndex= 10000;
    System.out.println(formBase10(startIndex));
}
public static String formBase10(long i){
    StringBuffer sb = new StringBuffer();
    if(i == 0){
        return "a";
    }
    while (i > 0){
        i = formBase10(i, sb);
    }
    return sb.toString();
}
public static long formBase10(long i, StringBuffer sb){
    int rem = (int)(i % BASE_62_CHARS_LENGTH);
    sb.append(BASE_62_CHARS[rem]);
    long r = (i / BASE_62_CHARS_LENGTH);
    return r;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
链接可以通过以下几种方式实现: 1. 使用第三方链接服务API,比如新浪微博、腾讯、百度等都有提供链接服务的API,可以通过调用API将长链接转换为链接。 2. 自己实现接生算法,将长链接转换为一串字符串,比如将长链接的MD5值作为链接的标识符,再将标识符与链接域名组合链接。需要注意的是,自己实现的链接算法需要保证生链接是唯一的,且不易被猜测。 以下是一个使用自己实现的算法生链接的Java示例代码: ```java public class ShortUrlGenerator { private static final String BASE62 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; private static final int BASE = 62; public static String generate(String longUrl) { String md5 = DigestUtils.md5Hex(longUrl); String hex = md5.substring(0, 8); long hexLong = Long.parseLong(hex, 16); StringBuilder sb = new StringBuilder(); while (hexLong > 0) { int remainder = (int) (hexLong % BASE); sb.append(BASE62.charAt(remainder)); hexLong /= BASE; } return sb.toString(); } } ``` 使用方法如下: ```java String longUrl = "http://www.example.com/long/url"; String shortUrl = ShortUrlGenerator.generate(longUrl); System.out.println("Short URL: " + shortUrl); ``` 该算法使用MD5将长链接转换为一串16进制字符串,再将该字符串转换为10进制数字,最后将10进制数字转换为62进制字符串作为链接的标识符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值