• 史上最全的java随机数/字符串生成算法(转)


    代码如下:

    1. package com.zuidaima.core.util;  
    2.   
    3. import java.util.Random;  
    4.   
    5. public class RandomUtil {  
    6.     public static final String ALLCHAR = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";  
    7.     public static final String LETTERCHAR = "abcdefghijkllmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";  
    8.     public static final String NUMBERCHAR = "0123456789";  
    9.   
    10.     /** 
    11.      * 返回一个定长的随机字符串(只包含大小写字母、数字) 
    12.      *  
    13.      * @param length 
    14.      *            随机字符串长度 
    15.      * @return 随机字符串 
    16.      */  
    17.     public static String generateString(int length) {  
    18.         StringBuffer sb = new StringBuffer();  
    19.         Random random = new Random();  
    20.         for (int i = 0; i < length; i++) {  
    21.             sb.append(ALLCHAR.charAt(random.nextInt(ALLCHAR.length())));  
    22.         }  
    23.         return sb.toString();  
    24.     }  
    25.   
    26.     /** 
    27.      * 返回一个定长的随机纯字母字符串(只包含大小写字母) 
    28.      *  
    29.      * @param length 
    30.      *            随机字符串长度 
    31.      * @return 随机字符串 
    32.      */  
    33.     public static String generateMixString(int length) {  
    34.         StringBuffer sb = new StringBuffer();  
    35.         Random random = new Random();  
    36.         for (int i = 0; i < length; i++) {  
    37.             sb.append(ALLCHAR.charAt(random.nextInt(LETTERCHAR.length())));  
    38.         }  
    39.         return sb.toString();  
    40.     }  
    41.   
    42.     /** 
    43.      * 返回一个定长的随机纯大写字母字符串(只包含大小写字母) 
    44.      *  
    45.      * @param length 
    46.      *            随机字符串长度 
    47.      * @return 随机字符串 
    48.      */  
    49.     public static String generateLowerString(int length) {  
    50.         return generateMixString(length).toLowerCase();  
    51.     }  
    52.   
    53.     /** 
    54.      * 返回一个定长的随机纯小写字母字符串(只包含大小写字母) 
    55.      *  
    56.      * @param length 
    57.      *            随机字符串长度 
    58.      * @return 随机字符串 
    59.      */  
    60.     public static String generateUpperString(int length) {  
    61.         return generateMixString(length).toUpperCase();  
    62.     }  
    63.   
    64.     /** 
    65.      * 生成一个定长的纯0字符串 
    66.      *  
    67.      * @param length 
    68.      *            字符串长度 
    69.      * @return 纯0字符串 
    70.      */  
    71.     public static String generateZeroString(int length) {  
    72.         StringBuffer sb = new StringBuffer();  
    73.         for (int i = 0; i < length; i++) {  
    74.             sb.append('0');  
    75.         }  
    76.         return sb.toString();  
    77.     }  
    78.   
    79.     /** 
    80.      * 根据数字生成一个定长的字符串,长度不够前面补0 
    81.      *  
    82.      * @param num 
    83.      *            数字 
    84.      * @param fixdlenth 
    85.      *            字符串长度 
    86.      * @return 定长的字符串 
    87.      */  
    88.     public static String toFixdLengthString(long num, int fixdlenth) {  
    89.         StringBuffer sb = new StringBuffer();  
    90.         String strNum = String.valueOf(num);  
    91.         if (fixdlenth - strNum.length() >= 0) {  
    92.             sb.append(generateZeroString(fixdlenth - strNum.length()));  
    93.         } else {  
    94.             throw new RuntimeException("将数字" + num + "转化为长度为" + fixdlenth  
    95.                     + "的字符串发生异常!");  
    96.         }  
    97.         sb.append(strNum);  
    98.         return sb.toString();  
    99.     }  
    100.   
    101.     /** 
    102.      * 每次生成的len位数都不相同 
    103.      *  
    104.      * @param param 
    105.      * @return 定长的数字 
    106.      */  
    107.     public static int getNotSimple(int[] param, int len) {  
    108.         Random rand = new Random();  
    109.         for (int i = param.length; i > 1; i--) {  
    110.             int index = rand.nextInt(i);  
    111.             int tmp = param[index];  
    112.             param[index] = param[i - 1];  
    113.             param[i - 1] = tmp;  
    114.         }  
    115.         int result = 0;  
    116.         for (int i = 0; i < len; i++) {  
    117.             result = result * 10 + param[i];  
    118.         }  
    119.         return result;  
    120.     }  
    121.   
    122.     public static void main(String[] args) {  
    123.         System.out.println("返回一个定长的随机字符串(只包含大小写字母、数字):" + generateString(10));  
    124.         System.out  
    125.                 .println("返回一个定长的随机纯字母字符串(只包含大小写字母):" + generateMixString(10));  
    126.         System.out.println("返回一个定长的随机纯大写字母字符串(只包含大小写字母):"  
    127.                 + generateLowerString(10));  
    128.         System.out.println("返回一个定长的随机纯小写字母字符串(只包含大小写字母):"  
    129.                 + generateUpperString(10));  
    130.         System.out.println("生成一个定长的纯0字符串:" + generateZeroString(10));  
    131.         System.out.println("根据数字生成一个定长的字符串,长度不够前面补0:"  
    132.                 + toFixdLengthString(123, 10));  
    133.         int[] in = { 1, 2, 3, 4, 5, 6, 7 };  
    134.         System.out.println("每次生成的len位数都不相同:" + getNotSimple(in, 3));  
    135.     }  
    136. }  
  • 相关阅读:
    记一次centos7.2下用crontab执行定时任务的过程(初级)
    海外手机号码正则匹配
    装了wamp之后,80端口被占用解决办法
    newtonsoft动态修改JObject
    .net正则提取手机号码,并替换带有手机号码的a标签
    .vs目录有什么用?
    centos7安装nginx-1.13.6 新手入门,图文解析
    centos7安装kafka_2.11-1.0.0 新手入门
    centos7安装apache 新手入门 图文教程
    面向对象——案例练习(4)判断点是否在圆的内部
  • 原文地址:https://www.cnblogs.com/timssd/p/5388794.html
Copyright © 2020-2023  润新知