目录
一、 短网址的优点
二、程序代码
三、运行结果
一、 短网址的优点
1、节省空间: 短网址相比原始网址长度更短,可以节省字符空间,特别是在限制字符数的场景下,比如发送短信。
2、美观简洁: 短网址通常由随机字符或者简短的关键词组成,看起来更美观、简洁,易于记忆和分享。
3、提升用户体验: 用户可以更方便地复制、粘贴或输入短网址,减少了输入错误的可能性。
4、防止链接截断: 一些应用或平台可能会在显示较长的链接时进行截断,使用短网址可以避免这种情况。
5、追踪与统计: 短网址服务通常会提供统计功能,可以追踪链接的点击次数、来源等信息,对于营销活动和数据分析很有帮助。
6、防止链接泄露: 长网址可能包含敏感信息,使用短网址可以在一定程度上保护原始链接的隐私。
7、增加安全性: 有些短网址服务提供安全策略,可以检测和阻止恶意网址,提升用户安全体验。
二、程序代码
package learnProject.csdn;
import org.apache.commons.lang.StringUtils;
import com.google.common.hash.Hashing;
/**
* 短网址工具类
*
* @author Roc-xb
*
*/
public class DwzUtil {
/**
* 10个数字+26个小写字母+26个大写字母
*/
private static String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
/**
* 62进制
*/
private static int scale = 62;
/**
* 最小长度
*/
private static int minLength = 5;
/**
* 种子
*/
private static int seed = 0;
/**
* 长链接转短链接
*
* @param longUrl 长链接
* @return 短链接
*/
public static String shortUrl(String longUrl) {
// 用MurmurHash算法得出长链接的hash值
int hash = Hashing.murmur3_32(seed).hashBytes(longUrl.getBytes()).asInt();
return hex10To62(hash);
}
/**
* 10进制转62进制
*
* @param hash
* @return 短链接
*/
public static String hex10To62(long hash) {
// 解决hash值小于0时,会触发异常。
hash = Math.abs(hash);
StringBuilder sb = new StringBuilder();
int remainder;
while (hash > scale - 1) {
// 对 scale 进行求余,然后将余数追加至 sb 中,由于是从末位开始追加的,因此最后需要反转字符串
remainder = Long.valueOf(hash % scale).intValue();
sb.append(chars.charAt(remainder));
// 除以进制数,获取下一个末尾数
hash /= scale;
}
sb.append(chars.charAt(Long.valueOf(hash).intValue()));
String value = sb.reverse().toString();
// value长度小于minLength时,在左侧填充字符‘0’
return StringUtils.leftPad(value, minLength, '0');
}
public static void main(String[] args) {
// 长链接
String longUrl = "https://www.ewbang.com/community/service";
// 短链接
String shortUrl = shortUrl(longUrl);
System.out.println(String.format("长链接:%s", longUrl));
System.out.println(String.format("短链接:https://www.ewbang.com/%s", shortUrl));
}
}