写一个能产生随机英文字符串的类,要求:1.程序预设三种产生随机字符串的范围供用户选择:大写的英文字母、小写英文字母、数字,需要通过枚举列出;2.允许用户自定义随机字符串产生的范围(例如用户定义字符串“AFRXC”,则随机字符串只在该串中产生),其定义位置可以是在构造时定义,也可以通过类中提供的方法定义。3.允许用户设置传入的字符串范围属否可与已存在的范围重复,例如,随机字符串产生的范围为“AaDF”,当用户再传入范围“ADJ”时,若用户选择true,则表示允许范围有重复,则此时字符串产生的范围为:“AaDFADJ”,若用户选择false,则表示不允许范围有重复,则此时字符串产生的范围为:“AaDFJ”4.允许用户按照字符串和下标的方式对字符串产生的范围进行删除。例如,字符串产生的范围为“ASDFGH”,则当用户需要删除”SD”时,可以直接传入下标(从0开始)进行删除,也可以直接传入“SD”进行删除5.允许用户自定生成随机字符串的长度:I.当用户传入一个数字时,例如10,则表示从字符串范围中产生10位长度的随机字符串II.当用户传入两个数字时,例如2,10,则表示从字符串范围中产生2~10位随机字符串(例如,可以生成5位的,可以生成2位的,也可以生成10位的,由系统随机决定)III.输出语句中直接写类对象,则表示生成6位随机字符串,例如(A类表示随机字符串类): A a = new A();
System.out.println(a);
输出结果为6位长度的随机字符串。求助大家,这个怎么做?麻烦解答一下,谢谢啦!
System.out.println(a);
输出结果为6位长度的随机字符串。求助大家,这个怎么做?麻烦解答一下,谢谢啦!
1.构造方法,传入初始的字符池,或者不传。
2.按照其那面几个功能,添加方法,修改字符串池,和设置生成字符串的字符数。
3.提供生成方法。
其实最主要的就是生成方法,针对
ABCD1234
这样8个字符,要随机生成6个
可以再写一个方法,获得0~7的随机数,然后取下标即可。
至于最后一个,就是说toString方法返回生成方法传入6的结果
import java.util.UUID;/**
* 随机工具类
* @author 0092397
*
*/
public class RandomUtils {
public static final int NUMBER = 0; public static final int CHAR = 1; public static final int NUM_MIX_CHAR = 2;
public static final int ALL = 3;
private static final String[] CHARS = new String[] { "0", "1", "2", "3",
"4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G",
"H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
"U", "V", "W", "X", "Y", "Z","a", "b", "c", "d", "e", "f", "g",
"h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t",
"u", "v", "w", "x", "y", "z" };
/**
* 获取随机字符串
* @param strategy
* @param length
* @return
*/
public static String generate(int strategy, int length) {
if (strategy == NUMBER) {
return generate(0, 9, length);
} else if (strategy == CHAR) {
return generate(10, 35, length);
} else if (strategy == NUM_MIX_CHAR) {
return generate(0, 35, length);
} else if(strategy == ALL){
return generate(0, 61, length);
}
return null;
} /**
* 生成随机字符串
* @param start
* @param end
* @param length
* @return
*/
private static String generate(int start, int end, int length) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
String c = CHARS[random(start, end)];
sb.append(c);
}
return sb.toString();
} /**
* 产生随机数
* @param start
* @param end
* @return
*/
private static int random(int start, int end) {
return (int) (Math.random() * (end - start + 1) + start);
}
/**
*
* @return
*/
public static String getUUID(){
String uuid = UUID.randomUUID().toString();
return uuid.replaceAll("-", "");
}
/**
* 短uuid
* @return
*/
public static String getShortUUID() {
int hashCodeV = UUID.randomUUID().toString().hashCode();
if(hashCodeV < 0) {//有可能是负数
hashCodeV = - hashCodeV;
}
return String.format("%015d", hashCodeV);
}
/**
*
* @return
*/
public static String randomMobile(){
return "138" + generate(NUMBER, 8);
}}
长度(int, 默认6)
生成结果串(String)
自定义范围字符串(String)
是否允许重复(boolean)
三个枚举对象(大写、小写、数字)//我猜这个应该是根据策略选择枚举对象吧。通篇看下来没看到枚举的运用。
//有必要的话在加个策略属性(int或String 有个默认的策略比如大写)
然后方法自己写吧。