java 随机生成简体汉字_Java 随机生成汉字

汉字以两个字节存储,称为“区位码”,高位叫区码,低位叫位码,有这俩字节组成汉字。假设有一张汉字表,横竖都是 94列,那么区码就相当于行,位码就相当于列,根据行列就可以确定一个汉字了,这有点像二位数组==,GB2312大致就是按照这种方式实现的,区码1~9即前9行放的是特殊字符,16~55区放的是一级汉字,56~87区放的是二级汉字,其余的暂时空余。为了区别中文与西文字母,在中文字符首位以1开头区分以0开头的ASCII码,GB2312给每个中文字符加上0xA0,因此,区码从0xB0-0xF7 都是汉字,位码范围0xA0-0xFE 。

汉字的unicode范围是:0x4E00~0x9FA5

第一种方法:unicode编码

public static char getRandomChar(){

return (char) (0x4e00 +(int)(Math.random()*(0x9fa5- 0x4e00+1))) ;

}

第二种方法:区位码

/**

* 汉字以两个字节存储,称为“区位码”,高位叫区码,低位叫位码,有这俩字节组成汉字

* @return

*/

private static char getRandomChar2() {

String str = "";

//随机数对象

Random random = new Random();

///区码,0xA0打头,从第16区开始,即0xB0=11*16=176,16~55一级汉字,56~87二级汉字

int hightPos = (176 + Math.abs(random.nextInt(39)));

//位码,0xA0打头,范围第1~94列

int lowPos = (161 + Math.abs(random.nextInt(93)));

//字节码

byte[] b = new byte[2];

b[0] = (Integer.valueOf(hightPos)).byteValue();

b[1] = (Integer.valueOf(lowPos)).byteValue();

try {

//区位码组合成汉字

str = new String(b, "GBK");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

System.out.println("错误");

}

//根据索引返回对应的字符

return str.charAt(0);

}

测试产生20个汉字:

e2ba1eb80cb1bec004fcc351df7b4ef1.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值