Java中的8个字符串唯一字符串

dan*_*nik 9 java string

有没有办法在Java中生成8个字符长的随机和唯一的字符串?

String id = getRandomString();
Run Code Online (Sandbox Code Playgroud)

然后Id就是例如 wf41Av5g

bil*_*aha 23

您可以使用RandomStringUtils

import org.apache.commons.lang.RandomStringUtils;
public class RandomStringUtilsTrial {
  public static void main(String[] args) {
    System.out.print("8 char string  >>>");
    System.out.println(RandomStringUtils.random(8, true, true));

  }
}
Run Code Online (Sandbox Code Playgroud)

  • 我很好奇,这是如何解决OP的问题的.我没有在文档中看到任何确保唯一性的内容. (10认同)

Tom*_*son 12

如果唯一性很重要,则不能简单地随机生成字符串.没有办法避免碰撞.甚至UUID都可能发生冲突,尽管这种可能性很小.

您可以保留已使用的字符串的记录,并在生成新的随机字符串时,检查记录以查看它是否重复,如果是,则丢弃它并再试一次.

但是,我建议你不要生成随机数.相反,保留一个计数器,并加密其输出以产生随机数字.如果你这样做,保证永远不会碰撞.查看我的早期答案,或罗森的答案


Joh*_*erg 11

独特属性取决于你所使用的范围.Java当然可以生成随机字符串,但如果您需要通用唯一标识符,则可以使用UUID类.

String unique = UUID.randomUUID().toString();
Run Code Online (Sandbox Code Playgroud)

  • 这很好,但我只需要 8 个字符,否则我会毫无疑问地使用它。 (2认同)
  • UUID 是结构化的;它们的字段以特定方式生成,并非每一位都同样独特。这意味着您不能只是从它们上切下随机位并期望它们保持独特。请参阅 Danny 对 [Oliver 的回答](http://stackoverflow.com/questions/7791475/8-chars-unique-string-in-java/7791522#7791522) 的评论,以了解此问题的实际情况。 (2认同)
  • @danny,[ie,](http://ideone.com/GKniz)`String eightChars = unique.substring(28);` (2认同)

小智 6

您可以根据当前时间创建此字符串。

例如:

2014 06 04 16 21 20 79 ---> 14 06 04 16 21 20 79

然后,您可以使用表格将每两位数字(最后两位除外)转换为字母数字字符(http://en.wikipedia.org/wiki/Base64 - 请注意,所有数字都小于 59)

然后你会收到

14 - O
06 - G
04 - E
16 - Q
21 - V
20 - U

OGEQVU79 <- 正好 8 个字符。有点复杂,但如果你调用函数的频率不超过 0.01 秒,它就可以工作