Java随机生成字符串的4种方式

2023-11-10

当您想要生成一个唯一的事务id或作为一个随机临时密码生成器,用户首次在网站上注册或创建防止自动输入的验证码时,通常需要生成随机的字符序列。

Java提供了许多不同的方法来编写随机字符串生成器应用程序,下面介绍几种方式。

UUID

UUID是由一组32位数的16进制数字所构成,故UUID理论上的总数为1632=2128,约等于3.4 x 1038。也就是说若每纳秒产生1兆个UUID,要花100亿年才会将所有UUID用完。

java.util.UUID 类可用于生成UUID, 它的static randomUUID方法返回一个32个字符的字符串。

import java.util.UUID;

public class RandomStringGenerator {

<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
    String randomString = usingUUID();
    System.out.println(<span class="hljs-string">"Random string is: "</span> + randomString);
    System.out.println(<span class="hljs-string">"Random string of 8 characters is: "</span>
        + randomString.substring(<span class="hljs-number">0</span>, <span class="hljs-number">8</span>));
}

<span class="hljs-function"><span class="hljs-keyword">static</span> String <span class="hljs-title">usingUUID</span><span class="hljs-params">()</span> </span>{
    UUID randomUUID = UUID.randomUUID();
    <span class="hljs-keyword">return</span> randomUUID.toString().replaceAll(<span class="hljs-string">"-"</span>, <span class="hljs-string">""</span>);
}

}

注意randomUUID方法生成的字符串包含“-”。上面的示例通过使用空字符串替换了。

以上程序输出为:

Random string is: 923ed6ec4d04452eaf258ec8a4391a0f
Random string of 8 characters is: 923ed6ec

使用Math类

下面的算法可以使用这种方法生成一个固定长度的随机字符串。

  • 初始化一个空字符串以保存结果。
  • 创建大小写字母和数字的组合,以创建一组超级字符。
  • 启动一个循环,该循环的count等于所需的随机字符串长度。
  • 在每次迭代中,生成一个介于0和超集长度之间的随机数。
  • 在步骤4中生成的数字索引处从步骤2中的字符串中提取字符,并将其添加到步骤1中的字符串中。
  • 循环完成后,步骤1中的字符串将是一个随机字符串。

示例代码:

import java.util.Math;

public class RandomStringGenerator {

<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
    String randomString = usingMath(<span class="hljs-number">10</span>);
    System.out.println(<span class="hljs-string">"Random string is: "</span> + randomString);
}

<span class="hljs-function"><span class="hljs-keyword">static</span> String <span class="hljs-title">usingMath</span><span class="hljs-params">(<span class="hljs-keyword">int</span> length)</span> </span>{
    String alphabetsInUpperCase = <span class="hljs-string">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</span>;
    String alphabetsInLowerCase = <span class="hljs-string">"abcdefghijklmnopqrstuvwxyz"</span>;
    String numbers = <span class="hljs-string">"0123456789"</span>;
    <span class="hljs-comment">// create a super set of all characters</span>
    String allCharacters = alphabetsInLowerCase + alphabetsInUpperCase + numbers;
    <span class="hljs-comment">// initialize a string to hold result</span>
    StringBuffer randomString = <span class="hljs-keyword">new</span> StringBuffer();
    <span class="hljs-comment">// loop for 10 times</span>
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i &lt; length; i++) {
        <span class="hljs-comment">// generate a random number between 0 and length of all characters</span>
        <span class="hljs-keyword">int</span> randomIndex = (<span class="hljs-keyword">int</span>)(Math.random() * allCharacters.length());
        <span class="hljs-comment">// retrieve character at index and add it to result</span>
        randomString.append(allCharacters.charAt(randomIndex));
    }
    <span class="hljs-keyword">return</span> randomString.toString();
}

}

以上程序输出为:

Random string is: kqNG2SYHeF
Random string is: lCppqqUg8P
Random string is: GGiFiEP5Dz

这种方法使您能够更好地控制需要包含在随机字符串中的字符。例如,如果您不想要数字,那么就从超集中删除它们。如果您想要特殊字符,那么就在超集中添加一组特殊字符。

使用Random类

此方法与Math方法类似,即创建所有字符的超集,生成一个随机索引,并使用该索引处的字符创建最终字符串。

这种方法使用java.util.Random 类生成随机索引。

示例代码:

import java.util.Random;

public class RandomStringGenerator {

<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
    String randomString = usingRandom(<span class="hljs-number">10</span>);
    System.out.println(<span class="hljs-string">"Random string is: "</span> + randomString);
}

<span class="hljs-function"><span class="hljs-keyword">static</span> String <span class="hljs-title">usingRandom</span><span class="hljs-params">(<span class="hljs-keyword">int</span> length)</span> </span>{
    String alphabetsInUpperCase = <span class="hljs-string">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</span>;
    String alphabetsInLowerCase = <span class="hljs-string">"abcdefghijklmnopqrstuvwxyz"</span>;
    String numbers = <span class="hljs-string">"0123456789"</span>;
    <span class="hljs-comment">// create a super set of all characters</span>
    String allCharacters = alphabetsInLowerCase + alphabetsInUpperCase + numbers;
    <span class="hljs-comment">// initialize a string to hold result</span>
    StringBuffer randomString = <span class="hljs-keyword">new</span> StringBuffer();
    <span class="hljs-comment">// loop for 10 times</span>
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i &lt; length; i++) {
        <span class="hljs-comment">// generate a random number between 0 and length of all characters </span>
        <span class="hljs-keyword">int</span> randomIndex = random.nextInt(allCharacters.length());
        <span class="hljs-comment">// retrieve character at index and add it to result</span>
        randomString.append(allCharacters.charAt(randomIndex));
    }
    <span class="hljs-keyword">return</span> randomString.toString();

}
}

以上程序输出为:

Random string is: TycOBOxITs
Random string is: 7LLWVbg0ps
Random string is: p6VyqdO6bT

您还可以使用java.util.SecureRandom类生成一个随机整数。它是java.util.Random的一个子类。

使用RandomStringUtils类

Apache Commons Lang库有一个org.apache.commons.lang.RandomStringUtils类,该类具有生成固定长度的随机字符串的方法。

它的方法可以生成只包含字母(随机字母)、数字(随机数字)或两者(随机字母数字)的随机字符串。

所有这些方法都接受一个整数参数,该参数表示它们将生成的字符串的长度。

示例代码:

import org.apache.commons.lang.RandomStringUtils;

public class RandomStringGenerator {

<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
    <span class="hljs-comment">// generate a random string of 10 alphabets</span>
    String randomString = RandomStringUtils.randomAlphabetic(<span class="hljs-number">10</span>);
    System.out.println(<span class="hljs-string">"Random string of 10 alphabets: "</span> + randomString);
    randomString = RandomStringUtils.randomNumeric(<span class="hljs-number">10</span>);
    System.out.println(<span class="hljs-string">"Random string of 10 numbers: "</span> + randomString);
    randomString = RandomStringUtils.randomAlphanumeric(<span class="hljs-number">10</span>);
    System.out.println(<span class="hljs-string">"Random string of 10 alphanumeric characters: "</span> + randomString);

}
}

以上程序输出为:

Random string of 10 alphabets: OEfadIYfFm
Random string of 10 numbers: 1639479195
Random string of 10 alphanumeric characters: wTQRMXrNY9

该类还有一个方法random,该方法接受一个整数(即要生成的字符串的长度)和一个char数组。生成的随机字符串仅由该数组中的字符组成。

通过根据构建工具添加以下依赖项,可以将Apache Commons Lang包含到您的项目中。

<dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-lang3</artifactId>
   <version>3.9</version>
</dependency>

希望这篇文章对你有所帮助。您知道其他随机字符串生成器方法吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java随机生成字符串的4种方式 的相关文章

随机推荐

  • 面向对象的编程思想和Python的继承和多态,特殊方法,引用计数

    面向对象的编程思想和Python的类 访问和属性 继承 在上一文中我们了解到了 私有的属性的访问方式 实例名 类名 私有属性名 一 私有的属性如何对外提供公有的取值和赋值方法呢 提供公有的方法作为接口进行取值 例如 class Avg Sc
  • 思科路由器NAT配置详解(转)

    思科路由器NAT配置详解 转 网络技术 2010 07 11 17 48 14 阅读104 评论0 字号 大中小 订阅
  • ubuntu安装vscode_vscode远程开发配置

    Remote development是一个支持vscode远程开发的插件 非常方便在windows下调试远程linux系统上的代码 使用配置方式如下 首先windows和远端服务器都要安装ssh windows上启用ssh服务即可 linu
  • RBAC权限管理

    RBAC权限管理 RBAC应用最为广泛的权限管理模型 核心的三要素是 用户 角色 权限 但并不仅仅局限于这三个核心要素 基于企业规模 用户规模 运维复杂度 RBCA其实是有很多的变种 从理论角度 有所谓的RBAC0 RBAC1 RBAC2
  • python opencv cv2在图片中画mask掩码/掩膜

    python opencv cv2在图片中画mask掩膜 import cv2 import numpy as np from PIL import Image import matplotlib pyplot as plt mask th
  • 年度最火的AOA蓝牙室内定位原理

    AOA 定位方法 AOA 定位方法 主要是测量信号移动台和基站之间的到达角度 以基站为起点形成的射线必经过移动台 两条射线的交点即为移动台的位置 该方法只需两个基站就可以确定 MS 的估计位置 其定位示意图如图所示
  • 语音转文字,视频转文字的新大陆!--飞书(好用记得点个赞)

    语音转文字 视频转文字的新大陆 飞书 1 选择自己对应的系统 下载飞书 飞书是字节跳动于2016年自研的新一代一站式协作平台 网址 https www feishu cn 2 下载安装之后 使用手机号 邮箱等注册登录 点击会议 点击进入子菜
  • 现代框架背后的概念

    很多初学者问 我应该学哪个框架 和 学一个框架之前需要学多少JS或TS 无数自以为是的文章都在宣传作者首选框架或库的优势 而不是向读者展示其背后的概念以做出明智的决定 那么让我们先解决第二个问题 学一个框架之前要学多少JS TS 尽可能多地
  • python调用c++动态库_使用python 调用 pybind11封装的 cuda C++ 动态链接库

    使用python 调用 pybind11封装的 cuda C 动态链接库 pybind11是可以使C 和python程序间互相调用的轻量头文件库 它可以将C 代码编译成python可调用的动态链接库 pybind11可以自动实现C 中vec
  • SpringMVC总结

    SpringMVC总结 一 配置 1 SpringMVC xml配置文件
  • 三相半控整流电路仿真-- (Matlab仿真1)

    这学期的现控 自控 电力电子技术需要我学学Matlab进行仿真 利用软件仿真本身也是需要我们掌握的很重要的一种技能 我想在学习理论的的过程借助他的帮助来使我更好的理解某些东西 而matlab其功能之强大毋庸置疑 甚至有玩笑说 matlab除
  • Python:使用循环语句for 做一个九九乘法表

    学会了循环语句后 就能做很多小程序了 在这里演示几种九九乘法表的编程方法 首先使用for循环来进行编程 for hang in range 1 10 定义行为hang 行数为9 for lie in range 1 hang 1 定义列为l
  • 反向代理与正向代理之间差异分析

    在网络世界中 爬虫ip是我们常用工具之一 但你是否了解反向爬虫ip和正向爬虫ip之间的区别呢 本文将向你分享反向爬虫ip与正向爬虫ip的差异分析 帮助你更好地选择适合的爬虫ip方式 提升爬虫项目的实际操作价值 首先我们来了解一下 反向爬虫i
  • 干了六年Android开发现在裸辞失业了,再过2个月就30了,该怎么继续生活

    由于这几年公司也在转型 工作经历大概可以分为 3 个阶段 第一阶段是从进公司开始做 android app 开发 无论是外包或者公司的主力产品都做过 第二阶段是做 ROM 开发 由于公司规模不大 除了硬件和底层的东西外 基本上是一个人负责了
  • 事件分发机制

    http www jianshu com p 86e7cd8bc73f View的事件分发 View的事件分发在Android中很重要 很重要 很重要 1 为什么会有事件分发机制 我们知道 android的布局结构是树形结构 这就会导致一些
  • Docker部署Overleaf包含中文字体与全套texlive镜像

    如今Overleaf已推出国内域名访问 速度较之前有很大的提升 但考虑到有些同学为了私密与方便性 因此有了自己搭建开源Overleaf服务的打算 请注意开源项目Overleaf不支持开放注册 需管理员账号来申请注册issue 461 与跟踪
  • CentOS 7.0 服务管理 – systemctl 命令

    最近在本地虚拟机搭建环境 使用service 命名报 service command not found 于是百度了好多都没解决 最后在官网看了下得知 CentOS 7 0中已经没有service命令 而是启用了systemctl服务器命令
  • 【前后缀 + 推公式整理】 Codeforces Round #813 (Div. 2) D. Empty Graph

    题意 给定 n n n 个点的点权 a i a i ai 这 n
  • vue高德地图打点

    vu高德地图打点有两种方式 前言 不管哪种方式 首先肯定是先到高德开放平台申请自己的key 官网链接 高德开放平台 高德地图API amap com 进去先注册 注册完 进入控制台 gt 应用管理 gt 我的应用 创建应用 然后你就有了自己
  • Java随机生成字符串的4种方式

    当您想要生成一个唯一的事务id或作为一个随机临时密码生成器 用户首次在网站上注册或创建防止自动输入的验证码时 通常需要生成随机的字符序列 Java提供了许多不同的方法来编写随机字符串生成器应用程序 下面介绍几种方式 UUID UUID是由一