博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
随机产生由特殊字符,大小写字母以及数字组成的字符串,且每种字符都至少出现一次...
阅读量:6757 次
发布时间:2019-06-26

本文共 2176 字,大约阅读时间需要 7 分钟。

hot3.png

题目:随机产生字符串,字符串中的字符只能由特殊字符 (!@#$%), 大写字母(A-Z),小写字母(a-z)以及数字(0-9)组成,且每种字符至少出现一次。

这样产生字符串的方式可以应用到如下场景,比如,我们有一个应用就是添加用户完毕之后,发邮件给指定用户包括一个长度为11位的初始化密码。

1. 我们先来定义一个包含这四种字符类型的char数组

private static final char[] symbols;   static {    StringBuilder tmp = new StringBuilder();    for (char ch = '0'; ch <= '9'; ++ch)      tmp.append(ch);    for (char ch = 'a'; ch <= 'z'; ++ch)      tmp.append(ch);    for (char ch = 'A'; ch <= 'Z'; ++ch)      tmp.append(ch);     // 添加一些特殊字符    tmp.append("!@#$%");    symbols = tmp.toString().toCharArray();  }

详细代码如下

import java.util.Random; public class RandomAlphaNumericGenerator {  private static final char[] symbols;   static {    StringBuilder tmp = new StringBuilder();    for (char ch = '0'; ch <= '9'; ++ch)      tmp.append(ch);    for (char ch = 'a'; ch <= 'z'; ++ch)      tmp.append(ch);    for (char ch = 'A'; ch <= 'Z'; ++ch)      tmp.append(ch);     // 添加一些特殊字符    tmp.append("!@#$%");    symbols = tmp.toString().toCharArray();  }   private final Random random = new Random();   private final char[] buf;   public RandomAlphaNumericGenerator(int length) {    if (length < 1)      throw new IllegalArgumentException("length < 1: " + length);    buf = new char[length];  }   public String nextString() {    for (int idx = 0; idx < buf.length; ++idx)      buf[idx] = symbols[random.nextInt(symbols.length)];    return new String(buf);  }}

2. 根据步骤1中产生的字符数组,随机产生一个字符串,判断其是否至少包含一个特殊字符、一个数字、一个小写字母以及一个大写字母,如果不是,则重新产生一个新的随机字符串直到产生符合条件的随机字符串为止

在这里,我们使用正则表达式的方式验证字符串是否符合要求,正则表达式为 .*(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%]).*

测试代码如下:

public class RandomAlphaNumericGeneratorTest {  public static void main(String[] args) {    RandomAlphaNumericGenerator randomTest = new RandomAlphaNumericGenerator(11);    for(int i=0;i<10;i++){      String result = null;      do {        result = randomTest.nextString();      } while (!result.matches(".*(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%]).*"));      System.out.println(result);    }    System.out.println();       }}

某一次运行的结果如下:

u7YMTR4!o$!H004vVb!W9ZRLnhzUpYl6$@UFDysu7qBa%2edSPri$e2KY9!HPtcWlXciVns$DMIN9j6BU%heDIHpNmn8747#$VdoLp@DDUxH8d

本文原文地址

转载于:https://my.oschina.net/u/1421266/blog/726087

你可能感兴趣的文章
细读shell-6
查看>>
ubuntu11.10安装php mysql wordpress
查看>>
一、2 基于wsgiref定义自己的web框架
查看>>
Ubuntu Server14.04 32位安装odoo8.0简单方法
查看>>
jQuery-easyui下的多表关联的增删改操作
查看>>
我的友情链接
查看>>
兼容IE,Firefox,CSS3 opacity透明度
查看>>
读取Hive中所有表的表结构,并在新Hive库中创建表,索引等
查看>>
XenServer部署系列之02——系统安装及许可
查看>>
linux下FTP服务器搭建
查看>>
程序的查询 ps - 笔记1
查看>>
Conversion to Dalvik format failed with error 1的又一种情形
查看>>
nodejs抓取数据二(列表解析)
查看>>
TextView中实现可点击链接的显示
查看>>
HAOI 树上操作
查看>>
深刻理解Python中的元类(metaclass)以及元类实现单例模式
查看>>
java随机生成n个不相同的整数
查看>>
DIV+CSS基础
查看>>
使用JS完成首页定时弹出广告图片
查看>>
codeforces 500c New Year Book Reading 【思维】
查看>>