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     }

 

posted on 2017-02-23 16:55  赌徒  阅读(707)  评论(0编辑  收藏  举报

导航