【发布时间】:2017-10-03 15:10:38
【问题描述】:
我在 Java 中有一个正长整数。基于这个数字,我想生成一个唯一的字母数字(不区分大小写)字符串。我的要求之一是不要使用字母 o。
我正在考虑做这样的事情:
String uniqueString = Long.toString(id, 35);
uniqueString = uniqueString.replace('o', 'z');
uniqueString = uniqueString.toUpperCase();
其中 id 是前面提到的长整数。
我对 2 个不同的 id 总是会生成不同的 uniqueStrings 是对的吗?
【问题讨论】:
-
是的,你是对的。
-
只要“id”是唯一的,你的“随机”ID就不会有'o',但是你的随机数会比随机分布有更多的z。考虑用随机的非“o”值替换每个“o”。
-
使用基数 36 而不是 35。26 个字母 + 10 个数字(0 到 9)= 36。
-
您不确定是否拥有唯一的密钥。例如,如果 1 被 z1 替换,2 被 o1 替换,如果你用 z 替换 o,你的两个数字 1 和 2 将具有相同的代码 z1
-
@FrançoisLEPORCQ 和 JustinKSU 你们都误解了这里发生的事情。基数 35 表示 0-9 和 a-y。基数 36 将包括 z。分布没有倾斜,因为 o 被替换为未使用的字符。
标签: java string unique alphanumeric