Java:随机字符生成器

devtools/2024/11/18 20:18:17/

Java程序生成随机字符和数字组合代码

  • 前言
    • 程序概述
    • 代码解析
      • 生成包含大小写A-Z和数字0-9,总长度为5,且不包含字母O的随机字符串
      • 生成包含大小写A-Z和数字0-9,总长度为4或5,且数字不能连续的随机字符串
  • 总结

前言

在这里插入图片描述

在现代的软件工程实践中,生成随机字符串已成为一个重要的需求,特别是在创建唯一标识符或安全密钥时显得尤为关键。

接下来,我们将深入探讨一个简单的Java程序,它的目的是创造一个由随机字母和数字构成的字符串,并采用多种方法来提高其随机性。

程序概述

程序首先构建了一个集合,包含了全部大写与小写的字母。

随后,从这个集合中随机挑选出四个字符,并在其后附加一个随机产生的数字。

为了提升所生成字符串的复杂度及难以预测性,程序会随机地交换字符串中的两个字符位置。

代码解析

首先,初始化一个 ArrayList 并填充所有英文字母(包括大写和小写):

java">ArrayList<Character> list = new ArrayList<>();
for (int i = 0; i < 26; i++) {list.add((char) ('a' + i));list.add((char) ('A' + i));
}
System.out.println(list);

接着,定义一个空字符串 result,用于存放最终生成的随机字符串:

java">String result = "";
Random r = new Random();

在循环中,从列表中随机选择四个字符,并将它们附加到 result 字符串上:

java">for (int i = 0; i < 4; i++) {int randomIndex = r.nextInt(list.size());char c = list.get(randomIndex);result = result + c;
}

随后,生成一个介于0至9之间的随机数字,并将其追加到 result 字符串末尾:

java">int number = r.nextInt(10);
result = result + number;

为了进一步提升随机性,程序将对生成的字符串进行字符位置的交换。这里需要注意的是,原代码中存在一处错误,即 char.length 应该被替换为 chars.length

java">char[] chars = result.toCharArray();
int index = r.nextInt(chars.length); char temp = chars[4];
chars[4] = chars[index];
chars[index] = temp;

最后,将修改后的字符数组转换为字符串并返回:

java">String code = new String(chars);
return code;

下面我们将针对您的两个例子分别编写Java函数,以便生成满足特定条件的随机字符串。

生成包含大小写A-Z和数字0-9,总长度为5,且不包含字母O的随机字符串

首先,我们需要创建一个字符集合,其中包含了所有的大写和小写字母以及数字,但要去除掉字母’O’和’o’。然后我们随机从中选择字符来构建我们的字符串。

java">import java.util.ArrayList;
import java.util.Random;public class RandomStringGenerator {public static String generateStringWithoutO() {// 创建字符集合ArrayList<Character> characters = new ArrayList<>();for (char ch = 'A'; ch <= 'Z'; ++ch) {if (ch != 'O') {characters.add(ch);characters.add(Character.toLowerCase(ch));}}for (char ch = '0'; ch <= '9'; ++ch) {characters.add(ch);}// 生成随机字符串StringBuilder sb = new StringBuilder();Random rand = new Random();for (int i = 0; i < 5; i++) {int index = rand.nextInt(characters.size());sb.append(characters.get(index));}return sb.toString();}public static void main(String[] args) {System.out.println(generateStringWithoutO());}
}

生成包含大小写A-Z和数字0-9,总长度为4或5,且数字不能连续的随机字符串

这个示例稍微复杂一些,因为我们要确保数字不会连续出现。我们可以先生成一个字符串,然后再检查是否有连续的数字,如果有,则重新生成。

java">import java.util.ArrayList;
import java.util.Random;public class RandomStringGenerator {private static final ArrayList<Character> CHARACTERS = new ArrayList<>();static {// 初始化字符集合for (char ch = 'A'; ch <= 'Z'; ++ch) {CHARACTERS.add(ch);CHARACTERS.add(Character.toLowerCase(ch));}for (char ch = '0'; ch <= '9'; ++ch) {CHARACTERS.add(ch);}}public static String generateStringNoConsecutiveNumbers() {StringBuilder sb = new StringBuilder();Random rand = new Random();boolean lastWasNumber = false;while (sb.length() < 4 || (sb.length() == 4 && rand.nextBoolean())) { // 长度4或5int index = rand.nextInt(CHARACTERS.size());char nextChar = CHARACTERS.get(index);if (Character.isDigit(nextChar)) {if (!lastWasNumber) {sb.append(nextChar);lastWasNumber = true;}} else {sb.append(nextChar);lastWasNumber = false;}}return sb.toString();}public static void main(String[] args) {System.out.println(generateStringNoConsecutiveNumbers());}
}

在这两个例子中,我们都使用了ArrayList来存储可能的字符,并利用Random类来产生随机数。第一个例子非常直接地从字符集中抽取字符,而第二个例子则增加了一步检查,以确保不会有两个连续的数字出现在生成的字符串中。

总结

上述Java程序演示了如何通过随机选择和字符位置的交换来生成具有一定复杂度的随机字符串。

虽然这个程序相对简单,但它提供了一个基础框架,可以根据具体需求进行扩展或调整。

例如,可以增加更多的字符选项、调整字符串长度或者引入更复杂的随机化机制等。

对于需要生成随机字符串的应用场景来说,这样的实现方式是一个良好的起点。


http://www.ppmy.cn/devtools/104852.html

相关文章

具身智能 | CCF专家谈术语

具身智能 (Embodied Artificial Intelligence) 作者&#xff1a;卢策吾&#xff0c;王鹤 InfoBox&#xff1a; 中文名&#xff1a;具身智能 外文名&#xff1a;Embodied Artificial Intelligence 简写&#xff1a;EAI 学科&#xff1a;人工智能、机器人学习、计算机视觉 …

机器学习:TF-IDF算法原理及代码实现

TF-IDF是一种用于信息检索与文本挖掘的常用加权技术。它是一种统计方法&#xff0c;用以评估一个词语对于一个文件集或一个语料库中的其中一份文件的重要程度。它的主要思想是&#xff1a;如果某个词语在一篇文章中出现的频率高&#xff08;Term Frequency&#xff0c;TF&#…

阿里达摩院:FunASR语音识别

阿里达摩院:FunASR语音识别 github&#xff1a; https://github.com/modelscope/FunASR/ 1 clone 代码到本地&#xff0c;切换到 FunASR/ git clone https://github.com/alibaba/FunASR.git && cd FunASR2 虚拟环境 conda create -p ./venv python3.12 conda activ…

深度学习100问42:什么是GNMT

嘿&#xff0c;你知道 GNMT 不&#xff1f;这可是个超厉害的翻译小能 手哦&#xff01;它的全名叫谷歌神经机器翻译。 它的主要任务呢&#xff0c;就是像个神奇的语言魔法师&#xff0c;把一种语言变成另一种语言。比如说把英语句子瞬间变成中文&#xff0c;或者把法语变成德…

EasyCVR中的H.265技术:助力实现大规模高效流畅的视频监控应用

随着视频监控技术的不断发展和用户对视频质量要求的不断提高&#xff0c;高效能、低延迟的视频编码技术成为视频监控系统中的重要支撑。TSINGSEE青犀视频旗下的EasyCVR视频汇聚平台凭借其强大的视频处理能力和对H.265技术的支持&#xff0c;在视频监控系统中展现出显著的应用优…

tornado获取请求参数

在Tornado框架中&#xff0c;获取请求参数&#xff08;包括查询字符串参数、表单数据、JSON数据等&#xff09;可以通过RequestHandler类提供的方法来完成。以下是一些常用的方法来获取不同类型的请求参数&#xff1a; 1. 获取查询字符串参数 查询字符串参数是附加在URL后面的…

MATLAB学习笔记3

1. 函数与脚本 自定义函数&#xff1a;用户可以创建自己的函数来进行特定的计算或操作。函数定义的基本格式为function [输出]函数名(输入)&#xff0c;例如 function [sum, minus] my_func(a, b)&#xff0c;sumab; minusa-b; end。 匿名函数和内联函数&#xff1a;匿名函数使…

8.22

1.设置主从从mysql57服务器 1&#xff09;配置主数据库 [rootmsater_5 ~]# systemctl stop filewalld [rootmsater_5 ~]# setenforce 0 [rootmsater_5 ~]# systemctl disable filewalld [rootmsater_5 ~]# ls anaconda-ks.cfg mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz…