写一个能产生随机英文字符串的类,要求: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位长度的随机字符串。求助大家,这个怎么做?麻烦解答一下,谢谢啦!

解决方案 »

  1.   

    随机字符串是一个类,
    1.构造方法,传入初始的字符池,或者不传。
    2.按照其那面几个功能,添加方法,修改字符串池,和设置生成字符串的字符数。
    3.提供生成方法。
    其实最主要的就是生成方法,针对
    ABCD1234
    这样8个字符,要随机生成6个
    可以再写一个方法,获得0~7的随机数,然后取下标即可。
    至于最后一个,就是说toString方法返回生成方法传入6的结果
      

  2.   

    3和4没有,你自己在这基础上改改吧,本来就是很简单的东西
    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);
    }}
      

  3.   

    A类成员
    长度(int, 默认6)  
    生成结果串(String) 
    自定义范围字符串(String)
    是否允许重复(boolean)
    三个枚举对象(大写、小写、数字)//我猜这个应该是根据策略选择枚举对象吧。通篇看下来没看到枚举的运用。
    //有必要的话在加个策略属性(int或String 有个默认的策略比如大写)
    然后方法自己写吧。