java隨機(jī)數(shù)生產(chǎn)算法實(shí)例
java提供了Math.random()函數(shù),返回一個(gè)double類型的隨機(jī)數(shù),也有util包里的Random類,可以生成double,int,float,long,bytes等隨機(jī)數(shù)。
但有些業(yè)務(wù)需求,往往需要對(duì)這些方法做一下封裝。比如用固定因子生成32位的3DES算法key值。
下面提供一些封裝的方法:
package test;
import java.util.Random;
public class RandomUtil {
public static final String ALLCHAR = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static final String LETTERCHAR = "abcdefghijkllmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static final String NUMBERCHAR = "0123456789";
/**
* 返回一個(gè)定長(zhǎng)的帶因子的固定的隨機(jī)字符串(只包含大小寫字母、數(shù)字)
*
* @param length
* 隨機(jī)字符串長(zhǎng)度
* @return 隨機(jī)字符串
*/
public static String generateStringByKey(int length, int channel) {
StringBuffer sb = new StringBuffer();
Random random = new Random(channel);
for (int i = 0; i < length; i++) {
sb.append(ALLCHAR.charAt(random.nextInt(ALLCHAR.length())));
}
return sb.toString();
}
/**
* 返回一個(gè)定長(zhǎng)的隨機(jī)字符串(只包含大小寫字母、數(shù)字)
*
* @param length
* 隨機(jī)字符串長(zhǎng)度
* @return 隨機(jī)字符串
*/
public static String generateString(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();
}
/**
* 返回一個(gè)定長(zhǎng)的隨機(jī)純字母字符串(只包含大小寫字母)
*
* @param length
* 隨機(jī)字符串長(zhǎng)度
* @return 隨機(jī)字符串
*/
public static String generateMixString(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();
}
/**
* 返回一個(gè)定長(zhǎng)的隨機(jī)純大寫字母字符串(只包含大小寫字母)
*
* @param length
* 隨機(jī)字符串長(zhǎng)度
* @return 隨機(jī)字符串
*/
public static String generateLowerString(int length) {
return generateMixString(length).toLowerCase();
}
/**
* 返回一個(gè)定長(zhǎng)的隨機(jī)純小寫字母字符串(只包含大小寫字母)
*
* @param length
* 隨機(jī)字符串長(zhǎng)度
* @return 隨機(jī)字符串
*/
public static String generateUpperString(int length) {
return generateMixString(length).toUpperCase();
}
/**
* 生成一個(gè)定長(zhǎng)的純0字符串
*
* @param length
* 字符串長(zhǎng)度
* @return 純0字符串
*/
public static String generateZeroString(int length) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
sb.append('0');
}
return sb.toString();
}
/**
* 根據(jù)數(shù)字生成一個(gè)定長(zhǎng)的字符串,長(zhǎng)度不夠前面補(bǔ)0
*
* @param num
* 數(shù)字
* @param fixdlenth
* 字符串長(zhǎng)度
* @return 定長(zhǎng)的字符串
*/
public static String toFixdLengthString(long num, int fixdlenth) {
StringBuffer sb = new StringBuffer();
String strNum = String.valueOf(num);
if (fixdlenth - strNum.length() >= 0) {
sb.append(generateZeroString(fixdlenth - strNum.length()));
} else {
throw new RuntimeException("將數(shù)字" + num + "轉(zhuǎn)化為長(zhǎng)度為" + fixdlenth + "的字符串發(fā)生異常!");
}
sb.append(strNum);
return sb.toString();
}
/**
* 每次生成的len位數(shù)都不相同
*
* @param param
* @return 定長(zhǎng)的數(shù)字
*/
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 void main(String[] args) {
int channel = 555555;// 測(cè)試因子比生產(chǎn)因子少1
System.out.println("返回一個(gè)定長(zhǎng)的帶因子的固定的隨機(jī)字符串(只包含大小寫字母、數(shù)字):" + generateStringByKey(32, channel));
System.out.println("返回一個(gè)定長(zhǎng)的隨機(jī)字符串(只包含大小寫字母、數(shù)字):" + generateString(32));
System.out.println("返回一個(gè)定長(zhǎng)的隨機(jī)純字母字符串(只包含大小寫字母):" + generateMixString(10));
System.out.println("返回一個(gè)定長(zhǎng)的隨機(jī)純大寫字母字符串(只包含大小寫字母):" + generateLowerString(10));
System.out.println("返回一個(gè)定長(zhǎng)的隨機(jī)純小寫字母字符串(只包含大小寫字母):" + generateUpperString(10));
System.out.println("生成一個(gè)定長(zhǎng)的純0字符串:" + generateZeroString(10));
System.out.println("根據(jù)數(shù)字生成一個(gè)定長(zhǎng)的字符串,長(zhǎng)度不夠前面補(bǔ)0:" + toFixdLengthString(123, 10));
int[] in = { 1, 2, 3, 4, 5, 6, 7 };
System.out.println("每次生成的len位數(shù)都不相同:" + getNotSimple(in, 3));
}
}
運(yùn)行效果如下:

以上這篇java隨機(jī)數(shù)生產(chǎn)算法實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Java隨機(jī)數(shù)算法原理與實(shí)現(xiàn)方法實(shí)例詳解
- java生成抽樣隨機(jī)數(shù)的多種算法
- 史上最全的java隨機(jī)數(shù)生成算法分享
- Java一個(gè)簡(jiǎn)單的紅包生成算法
- Java排序算法之堆排思想及代碼實(shí)現(xiàn)
- Java計(jì)算器核心算法代碼實(shí)現(xiàn)
- Java利用遞歸算法實(shí)現(xiàn)查詢斐波那契數(shù)
- Java垃圾回收之分代收集算法詳解
- Java垃圾回收之標(biāo)記壓縮算法詳解
- Java實(shí)現(xiàn)獲取指定個(gè)數(shù)的不同隨機(jī)數(shù)
相關(guān)文章
RocketMQ設(shè)計(jì)之主從復(fù)制和讀寫分離
這篇文章主要介紹了RocketMQ設(shè)計(jì)之主從復(fù)制和讀寫分離,RocketMQ提高消費(fèi)避免Broker發(fā)生單點(diǎn)故障引起B(yǎng)roker上的消息無法及時(shí)消費(fèi),下文關(guān)于了RocketMQ的相關(guān)內(nèi)容,需要的小伙伴可以參考一下2022-03-03
java編程創(chuàng)建型設(shè)計(jì)模式單例模式的七種示例
這篇文章主要為大家介紹了java編程中創(chuàng)建型設(shè)計(jì)模式之單例模式的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02
Java實(shí)現(xiàn)簡(jiǎn)易生產(chǎn)者消費(fèi)者模型過程解析
這篇文章主要介紹了Java實(shí)現(xiàn)簡(jiǎn)易生產(chǎn)者消費(fèi)者模型過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
如何在Java中獲取當(dāng)前年份(實(shí)例代碼)
在Java語(yǔ)言中獲取當(dāng)前年份有幾種方法:使用java.util包下的Calendar類,使用java.time包下的LocalDate類或者使用java.text包下的SimpleDateFormat類,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2023-11-11
Java如何使用Set接口存儲(chǔ)沒有重復(fù)元素的數(shù)組
Set是一個(gè)繼承于Collection的接口,即Set也是集合中的一種。Set是沒有重復(fù)元素的集合,本篇我們就用它存儲(chǔ)一個(gè)沒有重復(fù)元素的數(shù)組2022-04-04

