You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解析URL短链代码中62位字符数组的遍历与映射逻辑

URL短链工具字符生成逻辑解析

我正在开发一款类似TinyURL的URL短链工具,重构自一段代码,现在需要理解这段setup()方法的逻辑:

private void setup(){
 keyMap = new HashMap<String, String>();
 myRand = new Random();
 myChars = new char[62];
 for (int i = 0; i < 62; i++) {
 int j = 0;
 if (i < 10) {
 j = i + 48;
 } else if (i > 9 && i <= 35) {
 j = i + 55;
 } else {
 j = i + 61;
 }
 myChars[i] = (char) j;
 }
}

为何要遍历长度为62的char数组,且在i<10时加48、9<i≤35时加55、其余情况加61来生成字符映射?

为什么用长度为62的数组?

  • 这是短链工具的常规操作!我们常用的短链字符集是数字(0-9)+大写字母(A-Z)+小写字母(a-z),算下来刚好是10+26+26=62个字符。这个字符集的优势很明显:既足够简洁(字符种类多,短长度就能生成海量组合),又能让用户轻松识别输入,不会出现难以辨认的特殊字符。比如短链长度设为6的话,就能生成62^6≈560亿种不同的短链,完全能满足日常业务需求。

为什么要加不同的数值生成字符?

这其实是在利用ASCII码的数值对应关系,手动把数组索引转换成目标字符:

  • 当i < 10时,i是0到9,加上48后,刚好对应ASCII码里数字'0'到'9'的数值('0'的ASCII码是48,'9'是57),这样就把0-9的索引转成了对应的数字字符。
  • 当9 < i ≤35时,i是10到35(一共26个值),加上55后,10+55=65(对应大写字母'A'的ASCII码),35+55=90(对应大写字母'Z'的ASCII码),刚好把这部分索引转成A-Z的大写字母。
  • 剩下的i是36到61(也是26个值),加上61后,36+61=97(对应小写字母'a'的ASCII码),61+61=122(对应小写字母'z'的ASCII码),完美转换成a-z的小写字母。

说白了,这段代码就是在预先构建一个包含所有数字、大小写字母的字符池,后面生成短链的时候,就可以随机从这个池子里挑字符,组合成唯一的短链标识啦~

内容的提问来源于stack exchange,提问作者blue-sky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 23:47:30