生成随机汉字

Java常用方法   2025-04-18 19:57   187   0  
package com;

import java.io.UnsupportedEncodingException;
import java.util.Random;

/**
 * 生成随机汉字
 * 
 * @author wxhntmy
 * @date 2023年6月23日
 */
public class Main {

    /**
     * Unicode编码汉字的起始位置
     */
    private final static int START_INDEX = 0x4e00;
    /**
     * Unicode编码汉字的结束位置
     */
    private final static int END_INDEX = 0x9fa5;
    /**
     * 汉字个数
     */
    private final static int DELTA = END_INDEX - START_INDEX + 1;

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(getRandomChar(3));
        System.out.println(getRandomHan(3));
        System.out.println(getRandomChinese(3));
        System.out.println(getRandomJianHan(3));
    }

    /**
     * 方法一,Unicode
     * 
     * @param len 生成的汉字字符个数
     * 
     * @return 生成的随机汉字字符串
     */
    public static String getRandomChar(int len) {
        if (len <= 0) {
            return null;
        }
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < len; i++) {
            char han = (char) (START_INDEX + (int) (Math.random() * (DELTA)));
            sb.append(han);
        }

        return sb.toString();
    }

    /**
     * 方法二,Unicode
     * 
     * @param len 生成的汉字字符个数
     * 
     * @return 生成的随机汉字字符串
     */
    public static String getRandomHan(int len) {
        if (len <= 0) {
            return null;
        }
        Random ran = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < len; i++) {
            char han = (char) (START_INDEX + ran.nextInt(DELTA));
            sb.append(han);
        }

        return sb.toString();
    }

    /**
     * 方法三,GB2312
     * 
     * @param len 生成的汉字字符个数
     * 
     * @return 生成的随机汉字字符串
     */
    public static String getRandomChinese(int len) {
        if (len <= 0) {
            return null;
        }
        /// 随机数
        Random random = new Random();
        String[] rBase = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };

        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < len; i++) {
            // 生成第1位的区码
            // 生成11到14之间的随机数
            int r1 = random.nextInt(3) + 11;
            String str_r1 = rBase[r1];
            // 生成第2位的区码
            int r2;
            if (r1 == 13) {
                // 生成0到7之间的随机数
                r2 = random.nextInt(7);
            } else {
                // 生成0到16之间的随机数
                r2 = random.nextInt(16);
            }
            String str_r2 = rBase[r2];
            // 生成第1位的位码
            // 生成10到16之间的随机数
            int r3 = random.nextInt(6) + 10;
            String str_r3 = rBase[r3];
            // 生成第2位的位码
            int r4;
            if (r3 == 10) {
                // 生成1到16之间的随机数
                r4 = random.nextInt(15) + 1;
            } else if (r3 == 15) {
                // 生成0到15之间的随机数
                r4 = random.nextInt(15);
            } else {
                // 生成0到16之间的随机数
                r4 = random.nextInt(16);
            }
            String str_r4 = rBase[r4];
            // 将生成机内码转换为汉字
            byte[] bytes = new byte[2];
            // 将生成的区码保存到字节数组的第1个元素中
            String str_r12 = str_r1 + str_r2;
            int tempLow = Integer.parseInt(str_r12, 16);
            bytes[0] = (byte) tempLow;
            // 将生成的位码保存到字节数组的第2个元素中
            String str_r34 = str_r3 + str_r4;
            int tempHigh = Integer.parseInt(str_r34, 16);
            bytes[1] = (byte) tempHigh;
            String ctmp = "";
            try {
                // 根据字节数组生成汉字
                ctmp = new String(bytes, "GB2312");
            } catch (UnsupportedEncodingException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            sb.append(ctmp);
        }
        return sb.toString();
    }

    /**
     * 方法四, GBK
     * 
     * @param len 生成的汉字字符个数
     * @return 生成的随机汉字字符串
     */
    public static String getRandomJianHan(int len) {
        if (len <= 0) {
            return null;
        }
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < len; i++) {
            String str = null;
            // 定义高低位
            int hightPos, lowPos;
            Random random = new Random();
            // 获取高位值
            hightPos = (176 + Math.abs(random.nextInt(39)));
            // 获取低位值
            lowPos = (161 + Math.abs(random.nextInt(93)));
            byte[] b = new byte[2];
            b[0] = (new Integer(hightPos).byteValue());
            b[1] = (new Integer(lowPos).byteValue());
            try {
                str = new String(b, "GBK"); // 转成中文
            } catch (UnsupportedEncodingException ex) {
                ex.printStackTrace();
            }
            sb.append(str);
        }
        return sb.toString();
    }
}


博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。