【问题标题】:Generate a random Alphanumeric String without some characters生成不带某些字符的随机字母数字字符串
【发布时间】:2017-07-24 15:20:16
【问题描述】:

我想生成一个随机的字母数字字符串。我想从我的字符串中排除一些字符

l、i、o 和数字 0

目前我有这个代码:

import org.apache.commons.lang.RandomStringUtils;
...
numberFile = RandomStringUtils.randomAlphanumeric( 5 );

【问题讨论】:

  • myCode.substring 与您的问题有何关系?
  • @talex 抱歉是个错误
  • 什么是RandomStringUtils?我想它来自apache commons。如果是这样,则此库中不需要您的功能。
  • @talex org.apache.commons.lang.RandomStringUtils.randomAlphanumeric(int count) 这个库中没有函数

标签: java random alphanumeric


【解决方案1】:

由于您使用的是RandomStringUtils,因此您最好使用指定的RandomStringUtils#random 方法。

public static String random(int count,
                            int start,
                            int end,
                            boolean letters,
                            boolean numbers,
                            char... chars)

参数:
count - 要创建的随机字符串的长度
start - 字符集中开始的位置
end - 字符集中要在之前结束的位置
字母 - 只允许字母?
数字 - 只允许数字?
chars - 要从中选择随机数的字符集。如果为null,那么它将使用所有字符的集合。

请参阅文档here。

【讨论】:

  • 可以使用Regex String test; do { test= randomAlphanumeric(10); } while (!test.matches(REGEX ???);
  • @Mercer 如果有您想要使用的确切方法,您为什么要使用正则表达式?
【解决方案2】:

使用要构建字符串的元素构造一个数组。

假设 C={a,b,c,d....,1,2,3..} 的大小为 n

在[0,n-1] 范围内生成n 随机数,例如D={3,5,1,0,2..}。 现在,如果您从D 构建一个字符串s,如下所示:s[i] = C[D[i]] 您得到的是来自C 中定义的一组字符的随机字符串,这正是您想要的。

您可以轻松地使C 不包含您不希望出现在随机String 中的字符集。

【讨论】:

    【解决方案3】:

    在不使用任何第三方库的情况下将 Davide Spataro 的答案转换为代码可能如下所示:

    private static final String ALPHABET = "123456789abcdefghjkmnpqrstuvwxyz";
    
    public static String generateRandomString(int length) {
        Random random = ThreadLocalRandom.current();
        int alphabetLength = ALPHABET.length();
        char[] chars = new char[length];
        for (int i = 0; i < length; i++)
            chars[i] = ALPHABET.charAt(random.nextInt(alphabetLength));
        return String.valueOf(chars);
    }
    

    或者基于 Java 8 Stream 的方法:

    public static String generateRandomStringJava8(int length) {
        return IntStream.range(0, length)
                .map(i -> ThreadLocalRandom.current().nextInt(ALPHABET.length()))
                .mapToObj(i -> ALPHABET.substring(i, i + 1))
                .collect(Collectors.joining());
    }
    

    这两种方法都通过从静态ALPHABET 中选择length 随机字符来生成给定length 的Strings。

    【讨论】:

      猜你喜欢
      • 2010-09-08
      • 1970-01-01
      • 2021-04-05
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 2015-11-09
      • 1970-01-01
      • 2011-08-23
      相关资源
      最近更新 更多