随机字符串处理(java方法)

import java.util.Random;

public class UranDom {
    /**
     * 以下均为random函数
     * **/
    private static Random random;
     private static long seed;
      static {
          seed=System.currentTimeMillis();
          random=new Random(seed);
      }
      
    private UranDom(){}
    
    /**
     * 获取种子值
     * @return long 随机种子生成器种子值
     * 
     * */
    public static long getSeed(){
        return seed;
    }
    
    /**
     * 随机返回0到1之间的实数[0,1)
     * @return double 随机数
     * 
     * **/
    public static double uniform(){
        return random.nextDouble();
    }
    
    /**
     * 随机0到N-1的整数[0,N)
     * @param N 上限
     * @retrun int 随机数
     * **/
    public static int uniform(int N){
        return random.nextInt(N);
    }
    /**
     * 随机返回a到b-1之间的整数
     * @param a 下限
     * @param b 上限
     * @return int  随机数
     * 
     * **/
    public static int uniform(int a,int b){
        return a+uniform(b-1);
    }
    
    /**
     * 随机返回a到b之间的实数
     * @param a 下限
     * @param b 上限
     * @return int  随机数
     * 
     * **/
    
    public static double uniform(double a,double b){
        return a+uniform()*(b-a);
    }
    
    /**     * 
     * @param type ==1 数字
     * @param type ==2 纯小写字母
     * @param type ==3 纯大写字母
     * @param type ==4 数字和小写字母混排
     * @param type ==5 数字和大写字母混排
     * @param type ==6大写和小写字母混排
     * @param type ==7 大小写和数字混排
     * @param length  长度
     * @param both  只有length>2且type>4时生效,意思是,两者或以上都必须有一个以上的类型
     * **/    
    public static String RandString(int type,int length,boolean both){
        StringBuffer buffer=new StringBuffer();
        StringBuffer sb=null;
        String number="0123456789";
        String sletter="abcdefghijklmnopqrstuvwxyz";
        String bletter="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        
        //处理type
        switch(type){
        case 1://纯数字
            buffer.append(number);
            sb=new StringBuffer();
            while(length>0){
                sb.append(buffer.charAt(UranDom.uniform(10)));
                length--;
            }
            break;
        case 2://纯小写
            buffer.append(sletter);
            sb=new StringBuffer();
            while(length>0){
                sb.append(buffer.charAt(UranDom.uniform(26)));
                length--;
            }
            break;
        case 3://纯大写
            buffer.append(bletter);
            sb=new StringBuffer();
            while(length>0){
                sb.append(buffer.charAt(UranDom.uniform(26)));
                length--;
            }
            break;
        case 4://数字+小写
            buffer.append(number+sletter);
            if(!both){
                sb=new StringBuffer();
                while(length>0){
                    sb.append(buffer.charAt(UranDom.uniform(36)));
                    length--;
                }
            }else {//两者必有其一
                sb=new StringBuffer();
                int ra1=UranDom.uniform(length);
                int ra2=UranDom.uniform(length);
                //如果重复则重新随机
                while(ra2==ra1){
                    ra2=UranDom.uniform(length);
                }
                //随机第一个和第二个的数值
                char c1=(char)('0'+UranDom.uniform(10));
                char c2=(char)('a'+UranDom.uniform(26));
                
                while(length>0){
                    if(length==ra1){
                        sb.append(c1);
                    }
                    else if(length==ra2)
                    {
                        sb.append(c2);
                    }
                    else sb.append(buffer.charAt(UranDom.uniform(36)));
                    length--;
                }
            }
            break;
        case 5://数字+大写
            buffer.append(number+bletter);
            if(!both){
                sb=new StringBuffer();
                while(length>0){
                    sb.append(buffer.charAt(UranDom.uniform(36)));
                    length--;
                }
            }else {//两者必有其一
                sb=new StringBuffer();
                int ra1=UranDom.uniform(length);
                int ra2=UranDom.uniform(length);
                //如果重复则重新随机
                while(ra2==ra1){
                    ra2=UranDom.uniform(length);
                }
                //随机第一个和第二个的数值
                char c1=(char)('0'+UranDom.uniform(10));
                char c2=(char)('A'+UranDom.uniform(26));
                
                while(length>0){
                    if(length==ra1){
                        sb.append(c1);
                    }
                    else if(length==ra2)
                    {
                        sb.append(c2);
                    }
                    else sb.append(buffer.charAt(UranDom.uniform(36)));
                    length--;
                }
                
            }
            break;
        case 6://大写+小写
            buffer.append(sletter+bletter);
            if(!both){
                sb=new StringBuffer();
                while(length>0){
                    sb.append(buffer.charAt(UranDom.uniform(52)));
                    length--;
                }
            }else {//两者必有其一
                sb=new StringBuffer();
                int ra1=UranDom.uniform(length);
                int ra2=UranDom.uniform(length);
                //如果重复则重新随机
                while(ra2==ra1){
                    ra2=UranDom.uniform(length);
                }
                //随机第一个和第二个的数值
                char c1=(char)('a'+UranDom.uniform(26));
                char c2=(char)('A'+UranDom.uniform(26));
                
                while(length>0){
                    if(length==ra1){
                        sb.append(c1);
                    }
                    else if(length==ra2)
                    {
                        sb.append(c2);
                    }
                    else sb.append(buffer.charAt(UranDom.uniform(52)));
                    length--;
                }
            }
            break;
        case 7:
            buffer.append(number+sletter+bletter);
            if(!both){
                sb=new StringBuffer();
                while(length>0){
                    sb.append(buffer.charAt(UranDom.uniform(62)));
                    length--;
                }
            }else {//三者必有其一
                sb=new StringBuffer();
                int ra1=UranDom.uniform(length);
                int ra2=UranDom.uniform(length);
                int ra3=UranDom.uniform(length);
                //如果重复则重新随机
                while(ra2==ra1){
                    ra2=UranDom.uniform(length);
                }
                while(ra3==ra2||ra3==ra1){
                    ra3=UranDom.uniform(length);                    
                }
                //随机第一个和第二个的数值
                char c1=(char)('0'+UranDom.uniform(10));
                char c2=(char)('A'+UranDom.uniform(26));
                char c3=(char)('a'+UranDom.uniform(26));
                System.out.println(c1+c2+c3);
                while(length>0){
                    if(length==ra1){
                        sb.append(c1);
                    }
                    else if(length==ra2)
                    {
                        sb.append(c2);
                    }
                    else if(length==ra3){
                        sb.append(c3);
                    }
                    else sb.append(buffer.charAt(UranDom.uniform(62)));
                    length--;
            }
            break;
        }    
    
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值