题目:随机产生字符串,字符串中的字符只能由特殊字符 (!@#$%), 大写字母(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!W9Z RLnhzUpYl6$ @UFDysu7qBa %2edSPri$e2 KY9!HPtcWlX ciVns$DMIN9 j6BU%heDIHp Nmn8747#$Vd oLp@DDUxH8d
本文原文地址http://thecodesample.com/?p=935
更多实例 请访问 http://thecodesample.com/
相关推荐
LabVIEW自动检测字符串的大小写字母、数字、空格和特殊字符
主要给大家介绍了关于python生成各种字符串的方法实例,给大家提供些思路,抛砖引玉,希望大家能够喜欢
随机产生字符串,字符串中的字符只能由特殊字符(&@#$%*),大写字母(A-Z),小写字母(a-z)以及数字(0-9)组成,且每种字符至少出现一次。这样产生字符串的方式可以应用到如下场景,比如,我们有一个应用就是添加用户完毕...
可用于生成随机密码,加密算法密约(AES,RSA等)等场景,支持可选字符范围配置(如只允许数字,只允许字母,只允许数字字母,特殊字符等混合配置),即在选择的字符范围内去实现随机字符串生成,支持特殊字符生成,...
获取同时包含有数字、大写字母、小写字母的随机字符串,生成字符串长度是可以指定的,并有正则验证方法,代码可以直接引用。
输入一个字符串,统计出这个字符串的英文大写字母、小写字母、数字、空格以及其它字符的个数
一个函数,输入字符串位数,生产随机字符串,区分大小写
判断两个由大小写字母和空格组成的字符串在忽略大小写,且忽略空格后是否相等。 【输入】 两行,每行包含一个字符串。 【输出】 若两个字符串相等,输出YES,否则输出NO。 【输入样例】 a A bb BB ccc CCC Aa ...
统计某个字符串中大小写字母A或a出现的次数java 5count.rar
随机生成8位字符密码,包括1位特殊字符,1位数字,1位小写字母,1位大写字母,其余4位随机
利用汇编语言写成的程序 最高支持输入20位任意字符串,并且统计这一串字符串里的数字,大写字母,小写字母,特殊符号的个数 这是一个简单的程序,是学生党学完自己写的,请多多包涵。
忽略字段的首字母大小写,将json字符串转成javabean对象,解决Java对象中属性中首字母大写而取不到值(取到的值为空)的问题 忽略字段的首字母大小写,将json字符串转成List,解决Java对象中属性中首字母大写而取不...
输入一行字符,分别统计出英文大小写字母、空格、数字和其他字符的个数
四、输入一个字符串,字符串是字母和数字的组合,编程实现输出一个新的字符串,要求字母在前面,数字在后面,顺序不变,例如:2s7ess83a 变成sessa2783 五、一个字符串,获取最长的一个单词,如有多个相同...
LabVIEW字符串操作,检测字符串中大小写字母、数字、空格和特殊字符,并统计各类型字符的数量。 项目可直接运行~
java编程统计一个字符串中的字母,数字,空格,其他,输入一个字符串,就会输出字符串中包含的字母,数字,空格,其他
sql生成随机码--自定义大写、小写、数字、特定字符个数
字符串大小写转换的2种方法C++,对任意输入的字符串可实现字符串大小写的转换。