add RadixUtil pr#260

This commit is contained in:
Looly 2021-01-24 23:34:08 +08:00
parent 0471e640c5
commit 97ed8ca46a
2 changed files with 21 additions and 16 deletions

View File

@ -15,6 +15,7 @@
* 【extra 】 VelocityEngine的getRowEngine改为getRawEngineissue#I2EGRG@Gitee
* 【cache 】 缓存降低锁的粒度提高并发能力pr#1385@Github
* 【core 】 SimpleCache缓存降低锁的粒度提高并发能力pr#1385@Github
* 【core 】 增加RadixUtilpr#260@Gitee
### Bug修复
* 【core 】 修复FileUtil.move以及PathUtil.copy等无法自动创建父目录的问题issue#I2CKTI@Gitee

View File

@ -1,9 +1,10 @@
package cn.hutool.core.util;
/**
* 把一个十进制整数根据自己定义的进制规则进行转换
*
* <h2>主要应用一下情况</h2>
* 把一个十进制整数根据自己定义的进制规则进行转换<br>
* fromhttps://gitee.com/loolly/hutool/pulls/260
* <p>
* 主要应用一下情况
* <ul>
* <li>根据ID生成邀请码,并且尽可能的缩短并且不希望直接猜测出和ID的关联</li>
* <li>短连接的生成根据ID转成短连接同样不希望被猜测到</li>
@ -35,11 +36,14 @@ public class RadixUtil {
* 打乱后的59进制
*/
public final static String RADIXS_SHUFFLE_59 = "vh9wGkfK8YmqbsoENP3764SeCX0dVzrgy1HRtpnTaLjJW2xQiZAcBMUFDu5";
/**
* 把一个整型数值转换成自己定义的进制
* 长度即进制<br/>
* 长度即进制<br>
* <ul>
* <li>encode("AB",10) 51转换成2进制A=0;B=1 二进制1010结果 BABA</li>
* <li>encode("VIP",21) 21转换成3进制V=0;I=1;P=2 三进制210 ,得到结果PIV </li>
* </ul>
*
* @param radixs 自定进制,不要重复否则转不回来的
* @param num 要转换的数值
@ -93,21 +97,21 @@ public class RadixUtil {
*
* @param radixs 自定进制,需要和encode的保持一致
* @param encodeStr 需要转换成十进制的字符串
* @return
* @return int
*/
public int decodeToInt(final String radixs, final String encodeStr) {
//还原负数
return (int) decodeToLong(radixs, encodeStr);
return (int) decode(radixs, encodeStr);
}
/**
* 把转换后进制的字符还原成long
*
* @param radixs
* @param encodeStr
* @return
* @param radixs 自定进制,需要和encode的保持一致
* @param encodeStr 需要转换成十进制的字符串
* @return long
*/
public long decodeToLong(final String radixs, final String encodeStr) {
public long decode(final String radixs, final String encodeStr) {
//目标是多少进制
int rl = radixs.length();
long res = 0L;