首页 > 代码库 > Rand工具类

Rand工具类

commons-simplify / Rand8.java & RandN.java

 

 

RandN是主要类,用于生成指定位数的随机字符串,具体功能在这个类中实现

Rand8是修饰了RandN中每个对外方法的修饰类,用与生成8位的随机字符串(Deolin经常用到这个位数)

 

为了减少重复代码,RandN中的方法分了三层。这里选取一个方法系列为例。

 

第一层

技术分享

以这两个方法为例,这里采用了两种策略——不提供种子和提供种子,由于这两种策略的不同指出仅仅体现在Random对象上,

所以将这两种策略封装成了new Random(),连同size一起,向下一层转递。

size在这层中只是一个过客。

 

第二层

技术分享

从这一层开始,方法全部都是私有的,作为外部方法的代码封装使用。

而这个方法,因为让上一层生成的Random对象入参,所以它是那两个方法的共用部分。

它的作用是生成构建一个符合方法名的字符数组,连同Random对象和size一起,向下层传递

Random对象和size在这层中只是过客。

 

第三层

技术分享

这是最后一层的方法了,这层只有它一个。

从参数可以看上,客户端和上两层生成的信息全部汇总到了这个,

这个方法可以根据任意的随机策略,在任意的字符数组里,生成任意长度的字符串,

最后一层层向外返回。

 

更具体的实现需要查看源码,最后放上使用实例。

 

package io.deolin.commons.simplify.test;

import static io.deolin.commons.simplify.RandN.*;
import static io.deolin.commons.simplify.Rand8.*;
import static io.deolin.commons.simplify.Print.*;

public class RandTest {

    public static void main(String[] args) {
        long seed = 123L;

        ln(r8());
        ln(r8(seed));
        ln();
        ln(nr8());
        ln(nr8(seed));
        ln();
        ln(cr8());
        ln(cr8(seed));
        ln();
        ln(lcr8());
        ln(lcr8(seed));

        ln(rn(20));
        ln(rn(seed, 4));
        ln();
        ln(nrn(20));
        ln(nrn(seed, 4));
        ln();
        ln(crn(20));
        ln(crn(seed, 4));
        ln();
        ln(lcrn(20));
        ln(lcrn(seed, 4));
    }

}

 

运行两次的结果

技术分享

 

Rand工具类