• java生成自定义长度的唯一随机字符串


    思路

    基于唯一数字,再随机指向ASCII码的大小写字母的编码值实现随机,唯一数字可以由redis自增或者雪花id等生成。
    
    • 1

    实现代码

    /**
         * @description: 生成10个字符的唯一随机字符串,由数字大小写字母组成
         * @date 15:58 2023/10/13
         * @param increment 唯一数字
         * @param len 唯一随机字符长度
         **/
        private static String generateUkStr(long increment, int len) {
            char[] incrementArr = String.format("%0" + len + "d", increment).toCharArray();
            Pair<Integer, Integer> pairA = Pair.of(17, 33);
            Pair<Integer, Integer> pairB = Pair.of(49, 65);
            StringBuilder result = new StringBuilder(len);
            char s;
            for (char c : incrementArr) {
                int randomNum = ThreadLocalRandom.current().nextInt(0, 3);
                if (randomNum == 0) {
                    s = c;
                } else if (randomNum == 1) {
                    s = (char) (c + ThreadLocalRandom.current().nextInt(pairA.getKey(), pairA.getValue() + 1));
                } else {
                    s = (char) (c + ThreadLocalRandom.current().nextInt(pairB.getKey(), pairB.getValue() + 1));
                }
                result.append(s);
            }
            return result.toString();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    测试

    • 基于自增数字生成100万个
    public static void main(String[] args) {
            //测试生成100万个唯一随机字符,长度为10
            Set<String> set = new HashSet<>();
            //唯一数字长度为8
            for (long i = 11111111; i < 12111111; i++) {
                String result = generateUkStr(i, 10);
                System.out.println(result);
                if (set.contains(result)) {
                    throw new IllegalCallerException("已存在");
                }
                set.add(result);
            }
            System.out.println(String.format("总数量%d", set.size()));
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 结果
      在这里插入图片描述
  • 相关阅读:
    java基础面试题 第四天
    爬虫练习题(二)
    Linux学习——进程间通信
    分享5款2023年不容错过的宝藏软件
    二叉搜索树
    企业办公新模式,随时随地云上协同!
    Redis介绍
    代码随想录 | Day46
    让交互更加生动!有意思的鼠标跟随 3D 旋转动效
    如何轻松修改Windows远程连接的端口号
  • 原文地址:https://blog.csdn.net/qq_41633199/article/details/133813142