咸蛋系列一●《模板模式构建随机对象生成》3 自定义扩展,随机生成不重复汉字

目前网上随机生成汉字的源码很多,无外乎生成四个数字,前两个构成区码,后两个构成位,然后使用区位码对应的16进制编码转换成汉字(可参考http://www.cnblogs.com/navicy/archive/2005/05/08/150756.html)。

也就是说,没生成一个汉字,需要生成4个随机数,其实,仔细想想大可不如此麻烦。

研究区位码表(http://www.mytju.com/classCode/tools/QuWeiMa_FullList.asp),我们可以发现:

1. 16进制编码从A1A1开始,即1区1位的编码为A1A1
2. 汉字是从16区开始,87区结束。(B0 - F7)
3. 16区到55区为常用字,且55区后5位(5590 - 5594)未编码。(B0A1 - D7F9)。共3755个
4. 56-87区为生僻字(B1A1 - F7FE)。共3008个。
5. 1-9区为中文符号
6. 每个区的位都是从A1开始FE结束,共94个。

因此,假设我们要生成一个随机的常用字,那么我们完全可以生成一个0-3754的随机数,然后通过其在区位码中的顺序来获取具体的汉字。

博主将汉字的生成拆分成了多个部分。

1. 区域码提供者AreaCodeProvider

2. 常用字提供者SimpleChineseProvider_Often(由多个区域码提供者构成)。

2. 生僻字提供者SimpleChineseProvider_Unique(由多个区域码提供者构成)。

3. 简体字提供者SimpleChineseProvider(由常用字和生僻字提供者构成)。

具体代码请获取源码查看https://[email protected]/APirate/lib.pirate.unit.randomextension.git

 

另外,为了让使用者可以更方便的使用简体字提供者,我还提供了一个使用枚举调用的方法。用户可以通过枚举,非常方便的选择提供者,常用字、生僻字、或者两者都使用。

你可能感兴趣的:(模板模式)