zoukankan      html  css  js  c++  java
  • 随机数

    package com.opslab.util;


    import java.util.*;

    public final class RandomUtil {
    public static final String ALLCHAR
    = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    public static final String LETTERCHAR
    = "abcdefghijkllmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    public static final String NUMBERCHAR
    = "0123456789";


    /**
    * 生成制定范围内的随机数
    *
    * @param scopeMin
    * @param scoeMax
    * @return
    */
    public static int integer(int scopeMin, int scoeMax) {
    Random random = new Random();
    return (random.nextInt(scoeMax) % (scoeMax - scopeMin + 1) + scopeMin);
    }

    /**
    * 返回固定长度的数字
    *
    * @param length
    * @return
    */
    public static String number(int length) {
    StringBuffer sb = new StringBuffer();
    Random random = new Random();
    for (int i = 0; i < length; i++) {
    sb.append(NUMBERCHAR.charAt(random.nextInt(NUMBERCHAR.length())));
    }
    return sb.toString();
    }

    /**
    * 返回一个定长的随机字符串(只包含大小写字母、数字)
    *
    * @param length 随机字符串长度
    * @return 随机字符串
    */
    public static String String(int length) {
    StringBuffer sb = new StringBuffer();
    Random random = new Random();
    for (int i = 0; i < length; i++) {
    sb.append(ALLCHAR.charAt(random.nextInt(ALLCHAR.length())));
    }
    return sb.toString();
    }

    /**
    * 返回一个定长的随机纯字母字符串(只包含大小写字母)
    *
    * @param length 随机字符串长度
    * @return 随机字符串
    */
    public static String MixString(int length) {
    StringBuffer sb = new StringBuffer();
    Random random = new Random();
    for (int i = 0; i < length; i++) {
    sb.append(ALLCHAR.charAt(random.nextInt(LETTERCHAR.length())));
    }
    return sb.toString();
    }

    /**
    * 返回一个定长的随机纯大写字母字符串(只包含大小写字母)
    *
    * @param length 随机字符串长度
    * @return 随机字符串
    */
    public static String LowerString(int length) {
    return MixString(length).toLowerCase();
    }

    /**
    * 返回一个定长的随机纯小写字母字符串(只包含大小写字母)
    *
    * @param length 随机字符串长度
    * @return 随机字符串
    */
    public static String UpperString(int length) {
    return MixString(length).toUpperCase();
    }

    /**
    * 生成一个定长的纯0字符串
    *
    * @param length 字符串长度
    * @return 纯0字符串
    */
    public static String ZeroString(int length) {
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < length; i++) {
    sb.append('0');
    }
    return sb.toString();
    }

    /**
    * 根据数字生成一个定长的字符串,长度不够前面补0
    *
    * @param num 数字
    * @param fixdlenth 字符串长度
    * @return 定长的字符串
    */
    public static String toFixdLengthString(long num, int fixdlenth) {
    StringBuffer sb = new StringBuffer();
    String strNum = String.valueOf(num);
    if (fixdlenth - strNum.length() >= 0) {
    sb.append(ZeroString(fixdlenth - strNum.length()));
    } else {
    throw new RuntimeException("将数字" +
    num + "转化为长度为" + fixdlenth + "的字符串发生异常!");
    }
    sb.append(strNum);
    return sb.toString();
    }

    /**
    * 根据数字生成一个定长的字符串,长度不够前面补0
    *
    * @param num 数字
    * @param fixdlenth 字符串长度
    * @return 定长的字符串
    */
    public static String toFixdLengthString(int num, int fixdlenth) {
    StringBuffer sb = new StringBuffer();
    String strNum = String.valueOf(num);
    if (fixdlenth - strNum.length() >= 0) {
    sb.append(ZeroString(fixdlenth - strNum.length()));
    } else {
    throw new RuntimeException("将数字" +
    num + "转化为长度为" + fixdlenth + "的字符串发生异常!");
    }
    sb.append(strNum);
    return sb.toString();
    }

    /**
    * 每次生成的len位数都不相同
    *
    * @param param
    * @return 定长的数字
    */
    public static int getNotSimple(int[] param, int len) {
    Random rand = new Random();
    for (int i = param.length; i > 1; i--) {
    int index = rand.nextInt(i);
    int tmp = param[index];
    param[index] = param[i - 1];
    param[i - 1] = tmp;
    }
    int result = 0;
    for (int i = 0; i < len; i++) {
    result = result * 10 + param[i];
    }
    return result;
    }

    /**
    * 从指定的数组中随机数组中的某个元素
    */
    public static <T> T randomItem(T[] param) {
    int index = integer(0, param.length);
    return param[index];
    }

    /**
    * 实现一个简单的字符串乘法
    * @param str
    * @param multiplication
    * @return
    */
    private static String strMultiplication(String str,int multiplication){
    StringBuffer buffer = new StringBuffer();
    for (int i = 0; i < multiplication; i++) {
    buffer.append(str);
    }
    return buffer.toString();
    }
    /**
    * 从指定的数组中按照指定比例返回指定的随机元素
    * @param param
    * @param percentum
    * @param <T>
    * @return
    */
    public static <T> T randomItem(T[] param,double[] percentum){
    int length = percentum.length;
    Integer[] ints = ArrayUtil.doubleBitCount(percentum);
    int max = Collections.max(Arrays.asList(ints));
    int[] arr = new int[length];
    int sum = 0;
    Map map = new HashMap(length);
    int multiple = Integer.parseInt("1"+strMultiplication("0",max));
    for (int i = 0; i < length; i++) {
    int temp = (int)(percentum[i] * multiple);
    arr[i] = temp;
    if(i == 0){
    map.put(i,new int[]{1,temp});
    }else{
    map.put(i,new int[]{sum,sum+temp});
    }
    sum += temp;
    }
    int indexSum = integer(1,sum);
    int index =-1;
    for (int i = 0; i < length; i++) {
    int[] scope = (int[]) map.get(i);
    if(indexSum ==1 ){
    index = 0;
    break;
    }
    if(indexSum > scope[0] && indexSum <= scope[1]){
    index =i;
    break;
    }
    }
    if(index == -1){
    throw new RuntimeException("随机失败");
    }else{
    return param[index];
    }
    }
    /**
    * 返回一个UUID
    *
    * @return 小写的UUID
    */
    public static String uuid() {
    UUID uuid = UUID.randomUUID();
    String s = uuid.toString();
    return s.substring(0, 8) + s.substring(9, 13) +
    s.substring(14, 18) + s.substring(19, 23) + s.substring(24);
    }

    /**
    * 返回一个UUID
    *
    * @return 大写的UUID
    */
    public static String UUID() {
    UUID uuid = UUID.randomUUID();
    String s = uuid.toString();
    String temp = s.substring(0, 8) + s.substring(9, 13) +
    s.substring(14, 18) + s.substring(19, 23) + s.substring(24);
    return temp.toUpperCase();
    }

    /**
    * 返回一个有序列的uuid编码
    * 前11位为时间(毫秒)
    * 中间4位为主机特征码
    * 剩下的保证其唯一性
    *
    * @return
    */
    public static String squid() {
    Long date = new Date().getTime();
    String s = UUID.randomUUID().toString();
    String str = Long.toHexString(date);
    String result = str + OpslabConfig.HOST_FEATURE
    + s.substring(17, 18) + s.substring(19, 23) + s.substring(24);
    return result.toUpperCase();
    }
    }

  • 相关阅读:
    Java Web工作原理
    Java——入门“HelloWorld”
    Java——介绍
    vscode给 vue 项目 添加 eslint 验证提示遇到的细节问题
    使用全局变量,当多个线程同时修改静态属性第一季
    自编验证码图片识别程序 自定义的FloodFill函数
    nginx卸载ssl django明文
    nginx 7层全转发
    JAVA Socket入门详解(基本用法与代码实现)
    小白进入公司究竟有哪些不同?学生一定要看!
  • 原文地址:https://www.cnblogs.com/chinaifae/p/10254870.html
Copyright © 2011-2022 走看看