我在Java中有一个正数长号。根据这个数字,我想生成一个唯一的字母数字(不区分大小写)字符串。我的要求之一是不要使用字母o。
我正在考虑做这样的事情:
"webpack": "^3.1.0"
其中id是前面提到的长号。
我是否正确,对于2个不同的ID,始终会生成不同的uniqueStrings?
答案 0 :(得分:2)
根据评论,这不像我想象的那么明显,我想我会发一个答案。
Long.toString(long i, int radix)可以表示Character.MIN_RADIX和Character.MAX_RADIX之间的基数,分别等于2和36。它使用以下符号作为数字:
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
当您执行String uniqueString = Long.toString(id, 35);
时,您使用的是基数35以及除z
之外的所有符号,当然只要id
是唯一的,它将在不同的基础上是唯一的同样。
稍后您将o
替换为z
这当然不会改变任何内容,并且它不会导致您拥有的z
比一个随机分布更多评论,您只是将一个符号替换为另一个符号(数字might not be randomly distributed取决于id
代表的内容,但这是一个不同的主题。)
你没有问,但这是一个很好的解决方案,唯一的低效率最初使用o
,后者用z
代替z
而不是o
作为一个数字,但这并不重要,为了做到这一点,自己实现它将是一个不成熟的优化。