咸蛋系列一●《模板模式构建随机对象生成》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

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

时间: 2024-11-07 03:31:18

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

咸蛋系列一●《模板模式构建随机对象生成》2 构思

随机对象生成可以说是随机数生成的一个延伸,在实际使用中,我们可能要生成的不是一个简简单单的数字,而是像数字.大小写字符.中文汉字.算数表达式等. 由于其实现相对简单,取各种随机对象的源码网上也比比皆是,因而貌似也没人做一个通用的.可扩展的随机对象生成. 博主要不是因为闲得蛋疼也是不会想到做这个东西的,好了,言归正传.分析随机对象生成,其要点无外乎三点: 1. 设置随机对象集: 2. 获取一个或多个随机对象: 3. 获取一个或多个不重复随机对象: 在这三点中,后两者算法皆固定,仅设置对象集不同,故

Head First 设计模式系列之一----模板模式

开篇序言:四人帮的设计模式对于我这个菜鸟看着打瞌睡,后面果断买了一本head first的,感觉还可以像看报纸似的,花了一个寒假的晚上看了大半,确实内容也挺吸引人的,讲的很风趣.否则我也不可能,大过年的小伙伴们还在外面耍,自己还在那里装B.可是看完的困惑也随之而来,我怎么才能熟练的操练这些模式呢!书上讲的头头是道,可是实际中我们确不知道怎么运用!后面看到别人牛逼的都是随便一个模式都能脱口面而出,还有就是实际项目接触多了,肯定也有一定的职业嗅觉!所以希望自己也能够通过写博客,让自己对设计模式有一个

咸蛋系列一●《随机数生成篇》1 序

随机数在编程开发的时候使用还是比较多的,追常见的当然是验证码,除此之外,在抽奖.游戏之中也有运用.最近闲得蛋疼,就搞了个随机数生成的模板,搏总看官一乐. 先上项目目录: 简单使用: 数字不要4 RandomString rs = new RandomString(); //数字,并且不要4 var sdd = rs.AddProviders(EStringProviders.SingleDigit); sdd[EStringProviders.SingleDigit][0].AddExclude

Spring中的设计模式:模板模式

导读 模板模式在是Spring底层被广泛的应用,比如事务管理器的实现,JDBC模板的实现. 文章首发于作者的微信公众号[码猿技术专栏] 今天就来谈谈「什么是模板模式」.「模板模式的优缺点」.「模板模式的简单演示」.「模板模式在Spring底层的实现」. 什么是模板模式 模板模式首先要有一个抽象类,这个抽象类公开定义了执行它的方法的方式/模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.这种类型的设计模式属于行为型模式. 定义:「定义一个操作中的算法骨架,而将算法的一些步骤延

设计模式之 - 模板模式(Template Pattern)

引入:这几天在看一本讲spring源码的书<SPRING技术内幕>里面在讲加载配置文件的时候,可以有不同的加载方式,如根据文件系统目录加载配置文件(FileSystemXmlApplicationContext),类路径加载配置文件(ClassPathXmlApplicationContext),以及根据项目上下文目录(XmlWebApplicationContext)加载配置文件.这个在加载的过程中就使用了模板设计模式,所以就来学习下模板设计模式. 1. 模板设计模式在书中定义:  定义一个

设计模式系列之生成器模式

builder模式主要用于创建复杂对象,着重于复杂对象的内部构建.通过将构建过程与表示分离,同一个构建过程可以生产不同的外部表示.builder模式由导向器和生成器构成,导向器负责构建过程,生成器负责生产对象的外部表示.导向器包含有一个生成器,当需要更换对象表示时,只需要换一个生成器即可. 上篇文章设计芯片设计软件时,abstract factory更加着重于支持创造多个掩模系列上图形的功能.现在我们换一个重点,现在给出一个掩模上所有图形的信息,这个信息可以存储在格式化文件比如xml文件中,为了

设计模式总结篇系列:建造者模式(Builder)

关于建造者模式网上有很多文章,也有些不同的理解.在此结合网上其他文章对建造者模式进行总结. 总体说来,建造者模式适合于一个具有较多的零件(属性)的产品(对象)的创建过程.根据产品创建过程中零件的构造是否具有一致的先后顺序,可以将其分为如下两种形式. 一.通过Client.Director.Builder和Product形成的建造者模式 Builder负责Product类对象的具体过程构建,Director负责指导Build,要求Builder按照其指定的顺序去完成Produt的构造.最后通过Bu

抽象类和模板模式

一模板模式的简单规则 抽象父类可以只定义需要使用的某些方法,把不能实现的部分抽象成抽象方法,留给其子类去实现. 父类中可能包含需要调用其它系列方法的方法,这些被调用的方法既可以由父类实现,也可以由其子类实现.父类里提供的方法只定义了一个通用算法,其实现也许并不完全由自身实现,而必须依赖于其子类的辅助. 二模板模式应用 1代码示例  下载 Java代码   public abstract class SpeedMeter { // 转速 private double turnRate; publi

12. 星际争霸之php设计模式--模板模式

题记==============================================================================本php设计模式专辑来源于博客(jymoz.com),现在已经访问不了了,这一系列文章是我找了很久才找到完整的,感谢作者jymoz的辛苦付出哦! 本文地址:http://www.cnblogs.com/davidhhuan/p/4248192.html============================================