package shorurl;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.StringUtils;
publicclassShortUrl{
privatestaticfinalint BINARY =0x2;
privatestaticfinalint NUMBER_61 =0x0000003d;
staticfinalchar[] DIGITS ={
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
,
'a'
,
'b'
,
'c'
,
'd'
,
'e'
,
'f'
,
'g'
,
'h'
,
'i'
,
'j'
,
'k'
,
'l'
,
'm'
,
'n'
,
'o'
,
'p'
,
'q'
,
'r'
,
's'
,
't'
,
'u'
,
'v'
,
'w'
,
'x'
,
'y'
,
'z'
,
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
,
'G'
,
'H'
,
'I'
,
'J'
,
'K'
,
'L'
,
'M'
,
'N'
,
'O'
,
'P'
,
'Q'
,
'R'
,
'S'
,
'T'
,
'U'
,
'V'
,
'W'
,
'X'
,
'Y'
,
'Z'
};
protectedString shorten(String longUrl){
String shortUrl = shorten(longUrl,5);
if
(StringUtils.isEmpty(shortUrl)){
shortUrl = shorten(longUrl,6);
}
return
shortUrl;
}
publicString shorten(String longUrl,
int
urlLength){
if
(urlLength <0|| urlLength >6){
thrownewIllegalArgumentException(
"the length of url must be between 0 and 6"
);
}
String md5Hex =DigestUtils.md5Hex(longUrl);
int
binaryLength = urlLength *6;
long
binaryLengthFixer =Long.valueOf(StringUtils.repeat(
"1"
, binaryLength), BINARY);
for
(
int
i =0; i <4; i++){
String subString =StringUtils.substring(md5Hex, i *8,(i +1)*8);
subString =Long.toBinaryString(Long.valueOf(subString,16)& binaryLengthFixer);
subString =StringUtils.leftPad(subString, binaryLength,
"0"
);
StringBuilder sbBuilder =newStringBuilder();
for
(
int
j =0; j < urlLength; j++){
String subString2 =StringUtils.substring(subString, j *6,(j +1)*6);
int
charIndex =Integer.valueOf(subString2, BINARY)& NUMBER_61;
sbBuilder.append(DIGITS[charIndex]);
}
String shortUrl = sbBuilder.toString();
return
shortUrl;
}
returnnull;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2014-04-03 sql server 数字字符串的排序