没有'o'字符的字母数字字符串

时间:2017-10-03 15:10:39

标签: java string unique alphanumeric

我在Java中有一个正数长号。根据这个数字,我想生成一个唯一的字母数字(不区分大小写)字符串。我的要求之一是不要使用字母o。

我正在考虑做这样的事情:

"webpack": "^3.1.0"

其中id是前面提到的长号。

我是否正确,对于2个不同的ID,始终会生成不同的uniqueStrings?

1 个答案:

答案 0 :(得分:2)

根据评论,这不像我想象的那么明显,我想我会发一个答案。

Long.toString(long i, int radix)可以表示Character.MIN_RADIXCharacter.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作为一个数字,但这并不重要,为了做到这一点,自己实现它将是一个不成熟的优化。