项目碰到一个需求,流水号自增,但是自增不是10进制。是任意进制,并且规则可以任意定义,过滤一些不用的字符。比如说用6进制 012345,用abcdef。
处理思路:正常存储还是用正常10进制处理。单独记录下需要的规则abcdef。然后调用下面的switchHEX方法即可
Integer自带2,8,16进制的转换,进入Integer或者BigInteger类看看就行。
public static void main(String[] args) {
System.out.println(switchHEX(100,6,"abcdef"));
}
/**
* 常规的进制转换,非自定义的
* number 要转换的数
* from 原数的进制
* to 要转换成的进制
* 注意进制是2进制到36之间。
*/
private static String changeHEX(String number, int from, int to) {
return new BigInteger(number, from).toString(to);
}
/**
* 自定义的 进制转换
* value 10进制的数据
* base 要转换的进制
* valueEnum 自定义的进制规则
* switchHEX(100,2,"01")
*/
private static String switchHEX(int value, int base, String valueEnum) {
StringBuilder sb = new StringBuilder();
String digits = valueEnum.substring(0, base);
Stack<Character> s = new Stack<>();
while (value != 0) {
s.push(digits.charAt(value % base));
value /= base;
}
while (!s.isEmpty()) {
sb.append(s.pop());
}
return sb.toString();
}
效果:
通过这个方法,就可以任意规则的进制处理了。