Java –生成随机字符串

用纯Java生成随机无界字符串

@Test
public void givenUsingPlainJava_whenGeneratingRandomStringUnbounded_thenCorrect() {
    byte[] array = new byte[7]; // length is bounded by 7
    new Random().nextBytes(array);
    String generatedString = new String(array, Charset.forName("UTF-8"));

    System.out.println(generatedString);
}

用纯Java生成随机有界字符串

接下来–让我们看一下如何创建一个更受限的随机字符串;我们将使用小写字母字母和设置的长度生成一个随机字符串:

@Test
public void givenUsingPlainJava_whenGeneratingRandomStringBounded_thenCorrect() {

    int leftLimit = 97; // letter 'a'
    int rightLimit = 122; // letter 'z'
    int targetStringLength = 10;
    Random random = new Random();
    StringBuilder buffer = new StringBuilder(targetStringLength);
    for (int i = 0; i < targetStringLength; i++) {
        int randomLimitedInt = leftLimit + (int) 
          (random.nextFloat() * (rightLimit - leftLimit + 1));
        buffer.append((char) randomLimitedInt);
    }
    String generatedString = buffer.toString();

    System.out.println(generatedString);
}

使用Java 8生成随机字母字符串

现在,让我们使用在JDK 8中添加的Random.ints生成字母字符串:

@Test
public void givenUsingJava8_whenGeneratingRandomAlphabeticString_thenCorrect() {
    int leftLimit = 97; // letter 'a'
    int rightLimit = 122; // letter 'z'
    int targetStringLength = 10;
    Random random = new Random();

    String generatedString = random.ints(leftLimit, rightLimit + 1)
      .limit(targetStringLength)
      .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
      .toString();

    System.out.println(generatedString);
}

使用Java 8生成随机字母数字字符串

然后我们可以扩展字符集以获得字母数字字符串:

@Test
public void givenUsingJava8_whenGeneratingRandomAlphanumericString_thenCorrect() {
    int leftLimit = 48; // numeral '0'
    int rightLimit = 122; // letter 'z'
    int targetStringLength = 10;
    Random random = new Random();

    String generatedString = random.ints(leftLimit, rightLimit + 1)
      .filter(i -> (i <= 57 || i >= 65) && (i <= 90 || i >= 97))
      .limit(targetStringLength)
      .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
      .toString();

    System.out.println(generatedString);
}

请注意,上面使用了filter方法,以排除65至90之间的Unicode字符-避免超出范围的字符。

使用Apache Commons Lang生成有界的随机字符串

Apache的Commons Lang库在随机字符串生成方面有很大帮助。让我们看一下仅使用字母生成有界字符串:

@Test
public void givenUsingApache_whenGeneratingRandomStringBounded_thenCorrect() {

    int length = 10;
    boolean useLetters = true;
    boolean useNumbers = false;
    String generatedString = RandomStringUtils.random(length, useLetters, useNumbers);

    System.out.println(generatedString);
}

使用Apache Commons Lang生成字母字符串

另一个非常简单的示例–这次是一个只包含字母字符但没有将布尔标志传递给API的有界字符串:

@Test
public void givenUsingApache_whenGeneratingRandomAlphabeticString_thenCorrect() {
    String generatedString = RandomStringUtils.randomAlphabetic(10);

    System.out.println(generatedString);
}

使用Apache Commons Lang生成字母数字字符串

最后-相同的随机有界String,但是这次-数字:

@Test
public void givenUsingApache_whenGeneratingRandomAlphanumericString_thenCorrect() {
    String generatedString = RandomStringUtils.randomAlphanumeric(10);

    System.out.println(generatedString);
}

有了它,就可以使用纯Java,Java 8变体或Apache Commons Library创建有界和无界的字符串。

最后

通过不同的实现方法,我们能够使用纯Java,Java 8变体或Apache Commons Library生成绑定和未绑定的字符串。
在这些Java示例中,我们使用了java.util.Random,但值得一提的是,它不是加密安全的。考虑对安全敏感的应用程序改用java.security.SecureRandom。

相关推荐

mysql多字段内容并到单字段中的操作

inux 磁盘监控分析

Windows下 JDK1.8环境配置

HDFS租约机制

HBase是什么?

猜你喜欢

Java基础篇(02):特殊的String类,和相关扩展API

mysql(五)

JavaScript——WEBAPIS_BOM对象以及js执行机制

ASP.NET MVC5实现芒果分销后台管理系统(一):系统结构设计,集成AutoMapper,Log4net

完美解决MSSQL安装问题“Polybase要求安装Oracle JRE 7更新51(64位)”方案

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值