zoukankan      html  css  js  c++  java
  • JAVA的随机的字符串的封装(基本上够用了)

    我是能说我是一个码农,是个菜逼,是个代码的搬运工,现在站在各个巨人的肩膀上看着java的世界:

      1 import java.util.Random;
      2 
      3 public class UranDom {
      4     /**
      5      * 以下均为random函数
      6      * **/
      7     private static Random random;
      8      private static long seed;
      9       static {
     10           seed=System.currentTimeMillis();
     11           random=new Random(seed);
     12       }
     13       
     14     private UranDom(){}
     15     
     16     /**
     17      * 获取种子值
     18      * @return long 随机种子生成器种子值
     19      * 
     20      * */
     21     public static long getSeed(){
     22         return seed;
     23     }
     24     
     25     /**
     26      * 随机返回0到1之间的实数[0,1)
     27      * @return double 随机数
     28      * 
     29      * **/
     30     public static double uniform(){
     31         return random.nextDouble();
     32     }
     33     
     34     /**
     35      * 随机0到N-1的整数[0,N)
     36      * @param N 上限
     37      * @retrun int 随机数
     38      * **/
     39     public static int uniform(int N){
     40         return random.nextInt(N);
     41     }
     42     /**
     43      * 随机返回a到b-1之间的整数
     44      * @param a 下限
     45      * @param b 上限
     46      * @return int  随机数
     47      * 
     48      * **/
     49     public static int uniform(int a,int b){
     50         return a+uniform(b-1);
     51     }
     52     
     53     /**
     54      * 随机返回a到b之间的实数
     55      * @param a 下限
     56      * @param b 上限
     57      * @return int  随机数
     58      * 
     59      * **/
     60     
     61     public static double uniform(double a,double b){
     62         return a+uniform()*(b-a);
     63     }
     64     
     65     /**     * 
     66      * @param type ==1 数字
     67      * @param type ==2 纯小写字母
     68      * @param type ==3 纯大写字母
     69      * @param type ==4 数字和小写字母混排
     70      * @param type ==5 数字和大写字母混排
     71      * @param type ==6大写和小写字母混排
     72      * @param type ==7 大小写和数字混排
     73      * @param length  长度
     74      * @param both  只有length>2且type>4时生效,意思是,两者或以上都必须有一个以上的类型
     75      * **/    
     76     public static String RandString(int type,int length,boolean both){
     77         StringBuffer buffer=new StringBuffer();
     78         StringBuffer sb=null;
     79         String number="0123456789";
     80         String sletter="abcdefghijklmnopqrstuvwxyz";
     81         String bletter="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
     82         
     83         //处理type
     84         switch(type){
     85         case 1://纯数字
     86             buffer.append(number);
     87             sb=new StringBuffer();
     88             while(length>0){
     89                 sb.append(buffer.charAt(UranDom.uniform(10)));
     90                 length--;
     91             }
     92             break;
     93         case 2://纯小写
     94             buffer.append(sletter);
     95             sb=new StringBuffer();
     96             while(length>0){
     97                 sb.append(buffer.charAt(UranDom.uniform(26)));
     98                 length--;
     99             }
    100             break;
    101         case 3://纯大写
    102             buffer.append(bletter);
    103             sb=new StringBuffer();
    104             while(length>0){
    105                 sb.append(buffer.charAt(UranDom.uniform(26)));
    106                 length--;
    107             }
    108             break;
    109         case 4://数字+小写
    110             buffer.append(number+sletter);
    111             if(!both){
    112                 sb=new StringBuffer();
    113                 while(length>0){
    114                     sb.append(buffer.charAt(UranDom.uniform(36)));
    115                     length--;
    116                 }
    117             }else {//两者必有其一
    118                 sb=new StringBuffer();
    119                 int ra1=UranDom.uniform(length);
    120                 int ra2=UranDom.uniform(length);
    121                 //如果重复则重新随机
    122                 while(ra2==ra1){
    123                     ra2=UranDom.uniform(length);
    124                 }
    125                 //随机第一个和第二个的数值
    126                 char c1=(char)('0'+UranDom.uniform(10));
    127                 char c2=(char)('a'+UranDom.uniform(26));
    128                 
    129                 while(length>0){
    130                     if(length==ra1){
    131                         sb.append(c1);
    132                     }
    133                     else if(length==ra2)
    134                     {
    135                         sb.append(c2);
    136                     }
    137                     else sb.append(buffer.charAt(UranDom.uniform(36)));
    138                     length--;
    139                 }
    140             }
    141             break;
    142         case 5://数字+大写
    143             buffer.append(number+bletter);
    144             if(!both){
    145                 sb=new StringBuffer();
    146                 while(length>0){
    147                     sb.append(buffer.charAt(UranDom.uniform(36)));
    148                     length--;
    149                 }
    150             }else {//两者必有其一
    151                 sb=new StringBuffer();
    152                 int ra1=UranDom.uniform(length);
    153                 int ra2=UranDom.uniform(length);
    154                 //如果重复则重新随机
    155                 while(ra2==ra1){
    156                     ra2=UranDom.uniform(length);
    157                 }
    158                 //随机第一个和第二个的数值
    159                 char c1=(char)('0'+UranDom.uniform(10));
    160                 char c2=(char)('A'+UranDom.uniform(26));
    161                 
    162                 while(length>0){
    163                     if(length==ra1){
    164                         sb.append(c1);
    165                     }
    166                     else if(length==ra2)
    167                     {
    168                         sb.append(c2);
    169                     }
    170                     else sb.append(buffer.charAt(UranDom.uniform(36)));
    171                     length--;
    172                 }
    173                 
    174             }
    175             break;
    176         case 6://大写+小写
    177             buffer.append(sletter+bletter);
    178             if(!both){
    179                 sb=new StringBuffer();
    180                 while(length>0){
    181                     sb.append(buffer.charAt(UranDom.uniform(52)));
    182                     length--;
    183                 }
    184             }else {//两者必有其一
    185                 sb=new StringBuffer();
    186                 int ra1=UranDom.uniform(length);
    187                 int ra2=UranDom.uniform(length);
    188                 //如果重复则重新随机
    189                 while(ra2==ra1){
    190                     ra2=UranDom.uniform(length);
    191                 }
    192                 //随机第一个和第二个的数值
    193                 char c1=(char)('a'+UranDom.uniform(26));
    194                 char c2=(char)('A'+UranDom.uniform(26));
    195                 
    196                 while(length>0){
    197                     if(length==ra1){
    198                         sb.append(c1);
    199                     }
    200                     else if(length==ra2)
    201                     {
    202                         sb.append(c2);
    203                     }
    204                     else sb.append(buffer.charAt(UranDom.uniform(52)));
    205                     length--;
    206                 }
    207             }
    208             break;
    209         case 7:
    210             buffer.append(number+sletter+bletter);
    211             if(!both){
    212                 sb=new StringBuffer();
    213                 while(length>0){
    214                     sb.append(buffer.charAt(UranDom.uniform(62)));
    215                     length--;
    216                 }
    217             }else {//三者必有其一
    218                 sb=new StringBuffer();
    219                 int ra1=UranDom.uniform(length);
    220                 int ra2=UranDom.uniform(length);
    221                 int ra3=UranDom.uniform(length);
    222                 //如果重复则重新随机
    223                 while(ra2==ra1){
    224                     ra2=UranDom.uniform(length);
    225                 }
    226                 while(ra3==ra2||ra3==ra1){
    227                     ra3=UranDom.uniform(length);                    
    228                 }
    229                 //随机第一个和第二个的数值
    230                 char c1=(char)('0'+UranDom.uniform(10));
    231                 char c2=(char)('A'+UranDom.uniform(26));
    232                 char c3=(char)('a'+UranDom.uniform(26));
    233                 System.out.println(c1+c2+c3);
    234                 while(length>0){
    235                     if(length==ra1){
    236                         sb.append(c1);
    237                     }
    238                     else if(length==ra2)
    239                     {
    240                         sb.append(c2);
    241                     }
    242                     else if(length==ra3){
    243                         sb.append(c3);
    244                     }
    245                     else sb.append(buffer.charAt(UranDom.uniform(62)));
    246                     length--;
    247             }
    248             break;
    249         }    
    250     
    251     }
  • 相关阅读:
    javascript定义函数后立即执行(IIFE)
    工作流选型专项,Camunda or flowable or?
    Excel中的xlsm宏密码怎么破解
    《生命是什么》总结
    《麦肯锡教我的思考武器》总结
    《作为意志和表象的世界》总结
    Go语言如何将json时间格式化为dateime格式
    《少有人走的路》总结
    《时间简史》总结
    架构的常规分类及复用重点
  • 原文地址:https://www.cnblogs.com/dutu/p/6434292.html
Copyright © 2011-2022 走看看