个性化阅读
专注于IT技术分析

如何在Java中生成具有自定义长度的随机字母数字字符串

本文概述

许多开发人员不知道如何生成带有字母和数字的随机字符串。此功能对于生成随机标识符非常有用, 出于某些原因, 我们将使用临时标识符。在Java中, 有很多生成此类字符串的方法。

在本文中, 我们将向你展示3种使用Java轻松生成随机字符串的方法。

A.生成带有特定字符的随机字母数字字符串[a-ZA-Z0-9]

为了使用自定义实现生成随机字符串, 你可以在自己的项目中使用以下方法作为助手:

import java.security.SecureRandom;

/**
 * This method returns a random string generated with SecureRandom
 * 
 * @param length
 * @return 
 */
public static String generateRandomString(int length) {
    // You can customize the characters that you want to add into
    // the random strings
    String CHAR_LOWER = "abcdefghijklmnopqrstuvwxyz";
    String CHAR_UPPER = CHAR_LOWER.toUpperCase();
    String NUMBER = "0123456789";

    String DATA_FOR_RANDOM_STRING = CHAR_LOWER + CHAR_UPPER + NUMBER;
    SecureRandom random = new SecureRandom();

    if (length < 1) throw new IllegalArgumentException();

    StringBuilder sb = new StringBuilder(length);
    
    for (int i = 0; i < length; i++) {
        // 0-62 (exclusive), random returns 0-61
        int rndCharAt = random.nextInt(DATA_FOR_RANDOM_STRING.length());
        char rndChar = DATA_FOR_RANDOM_STRING.charAt(rndCharAt);

        sb.append(rndChar);
    }

    return sb.toString();
}

此类使用Java.security的SecureRandom类实现随机字符串生成器。此类提供了加密功能强的随机数生成器(RNG)。加密强度高的随机数至少要符合FIPS 140-2″加密模块的安全性要求”第4.9.1节中指定的统计随机数生成器测试。此外, SecureRandom必须产生不确定的输出。因此, 传递给SecureRandom对象的任何种子材料都必须不可预测, 并且所有SecureRandom输出序列必须具有加密强度。

你只需要基本调用generateRandomString方法, 即可将要生成的字符串的长度作为第一个参数, 例如:

// Your own package
package com.ourcodeworld.mavensandbox;

// Import required class
import java.security.SecureRandom;

/**
 * Basic example of random strings with SecureRandom
 * 
 */
public class Index {
    
    public static void main(String[] args){
        for (int i = 0; i < 5; i++) {
            System.out.println("Random string: " + generateRandomString(10));
            System.out.println("\n");
        }
    }
    
    /**
     * This method returns a random string generated with SecureRandom
     * 
     * @param length
     * @return 
     */
    public static String generateRandomString(int length) {
        String CHAR_LOWER = "abcdefghijklmnopqrstuvwxyz";
        String CHAR_UPPER = CHAR_LOWER.toUpperCase();
        String NUMBER = "0123456789";

        String DATA_FOR_RANDOM_STRING = CHAR_LOWER + CHAR_UPPER + NUMBER;
        SecureRandom random = new SecureRandom();
    
        if (length < 1) throw new IllegalArgumentException();

        StringBuilder sb = new StringBuilder(length);
        
        for (int i = 0; i < length; i++) {
            // 0-62 (exclusive), random returns 0-61
            int rndCharAt = random.nextInt(DATA_FOR_RANDOM_STRING.length());
            char rndChar = DATA_FOR_RANDOM_STRING.charAt(rndCharAt);

            sb.append(rndChar);
        }

        return sb.toString();
    }
}

上一类在循环内生成5个随机字符串, 这些字符串将在控制台中打印, 它将输出以下内容:

Random string: iU5OHBDJ34

Random string: PDfkpDQMYz

Random string: 7OXEtv4PTT

Random string: CvYpocv3bE

Random string: yyBeOe5cee

B.生成随机字符串Apache Commons Lang

如果你不想自己实现此功能, 则可以依赖第三方程序包, 特别是Apache。标准Java库无法提供用于操纵其核心类的足够方法。 Apache Commons Lang提供了这些额外的方法。

Commons Lang包为java.lang API提供了许多帮助程序实用程序, 特别是字符串操作方法, 基本数值方法, 对象反射, 并发, 创建和序列化以及系统属性。此外, 它还包含对java.util.Date的基本增强, 以及一系列专用于构建方法的实用程序, 例如hashCode, toString和equals。

如果使用maven处理项目的依赖项, 请修改pom.xml文件, 并将软件包添加为依赖项:

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.9</version>
</dependency>

或者, 你可以下载包的.jar文件, 然后将其手动添加到你的项目中。有关此软件包的更多信息, 请访问Maven存储库中的官方页面。将包包含在项目中之后, 你将能够从包中导入RandomStringUtils类。在此类中, 你可以调用静态方法以生成随机字符串:

  • RandomStringUtils.randomNumeric:创建一个随机字符串, 其长度为指定的字符数。
  • RandomStringUtils.randomAlphabetic:创建一个随机字符串, 其长度在包含最小值和专有最大值之间。将从拉丁字母字符集(a-z, A-Z)中选择字符。
  • RandomStringUtils.randomAlphanumeric:创建一个随机字符串, 其长度为指定的字符数。将从拉丁字母字符(a-z, A-Z)和数字0-9中选择字符。

例如:

package com.ourcodeworld.mavensandbox;

// Import required class
import org.apache.commons.lang3.RandomStringUtils;

/**
 * Basic example of random strings with RandomStringUtils
 * 
 */
public class Index {
    
    public static void main(String[] args){
        System.out.println("\nNumeric string: [0-9]");

        System.out.println(RandomStringUtils.randomNumeric(10));

        System.out.println("\nAlphabetic String: [a-zA-Z]");

        System.out.println(RandomStringUtils.randomAlphabetic(10));

        System.out.println("\nAlphanumeric String: [a-zA-Z0-9]");

        System.out.println(RandomStringUtils.randomAlphanumeric(10));
    }
}

此代码将生成如下输出:

Numeric string: [0-9]
9688507775

Alphabetic String: [a-zA-Z]
BdNbwFqntH

Alphanumeric String: [a-zA-Z0-9]
IZdNATmcQs

C.生成通用唯一标识符(UUID)

如果你想用Java生成UUID, Java的util包已经提供了生成此类ID的功能。 Java.util的UUID类表示一个不变的通用唯一标识符(UUID)。 UUID表示一个128位的值。这些全局标识符存在不同的变体。此类的方法用于操纵Leach-Salz变体, 尽管构造函数允许创建UUID的任何变体(如下所述)。

我们将向你展示如何生成具有2个变体的UUID, 第一个生成带破折号的ID(默认实现), 第二个不带破折号的ID:

package com.ourcodeworld.mavensandbox;

// Import required class
import java.util.UUID;

/**
 * Basic example of random strings with randomUUID
 * 
 */
public class Index {
    
    public static void main(String[] args){
        for (int i = 0; i < 5; i++) {
            System.out.println(generateRandomUUID());
        }

        for (int i = 0; i < 5; i++) {
            System.out.println(generateRandomUUIDWithoutDash());
        }
    }
    
     public static String generateRandomUUID() {
        return UUID.randomUUID().toString();
    }

    public static String generateRandomUUIDWithoutDash() {
        return UUID.randomUUID().toString().replace("-", "");
    }
}

这将生成以下输出:

eccfd644-07b0-4817-ae37-da394cc1e6d3
87d6524d-5892-437c-b8fa-a06f5f98f3a2
35949777-141d-4a7f-a868-d385f0c6d86a
1528594e-9687-42df-937d-241637746056
dc9b998a-83f2-4e83-83ba-9b0f5ba0be7a


b5cdbc574e8a4294b402234321818a4e
6b450556572d47228ea03bacf335c3ec
475d7823bd2d41c2a28b72aea6933526
eb1dba5a4e864bc1aa4655e671cd5201
ea40ef86685f4508a5429835d1aba78a

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何在Java中生成具有自定义长度的随机字母数字字符串

评论 抢沙发

评论前必须登录!