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 }