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(); } }