java随机生成中文姓名

package com.yc.spring.util;

import java.util.Random;

public class NameBuilder {

	private static String xings = "赵 钱 孙 李 周 吴 郑 王 冯 陈 褚 卫 " + "蒋 沈 韩 杨 朱 秦 尤 许 何 吕 施 张 " + "孔 曹 严 华 金 魏 陶 姜 戚 谢 邹 喻 "
			+ "柏 水 窦 章 云 苏 潘 葛 奚 范 彭 郎 " + "万俟 司马 上官 欧阳 夏侯 诸葛 闻人 东方 赫连 皇甫 尉迟 公羊";
	private static String mings = "碧凡、夏菡、曼香、若烟、半梦、雅绿、冰蓝、灵槐、平安、书翠、翠风、香巧、代云、" + "友巧、听寒、梦柏、醉易、访旋、亦玉、凌萱、访卉、怀亦、笑蓝、春翠、靖柏、书雪、"
			+ "乐枫、念薇、靖雁、寻春、恨山、从寒、忆香、觅波、静曼、凡旋、新波、代真、新蕾、" + "雁玉、冷卉、紫山、千琴、恨天、傲芙、盼山、怀蝶、冰兰、问旋、从南、白易、问筠、"
			+ "如霜、半芹、寒雁、怜云、寻文、谷雪、乐萱、涵菡、海莲、傲蕾、青槐、冬儿、易梦、" + "惜雪、宛海、之柔、夏青";
	private static Random r = new Random();

	/**
	 * 使用指定的姓氏,用xings里面的字,随机生成姓名
	 * @param xing		指定姓氏
	 * @param length	指定名字总长度
	 * @return
	 */
	public static String build(String xing, int length) {
		// 定义姓名
		String xingming = xing;

		//创建随机对象
		Random r = new Random();

		while (xingming.length() < length) {
			// 从名字符串中随机取出一个字符的编号
			int index = r.nextInt(mings.length());
			// 从名字字符串中取一个字
			String s = mings.substring(index, index + 1);
			// 如果s是顿号,就重新再取一次(使用常量比变量,这是推荐的方式)
			if ("、".equals(s)) {
				continue;
			} else {
				//将名 加到 姓名中取
				xingming += s;
			}
		}
		return xingming;
	}

	/**
	 * 使用xings里面姓氏,用xings里面的字,随机生成姓名
	 * @param length 指定名字总长度
	 * @return
	 */
	public static String build(int length) {
		// 判断姓名的长度必须大于 2
		if (length < 2) {
			System.out.println("姓名不能少于2个字符");
			return null;
		}
		/**
		 * 因为有些姓氏不能拆分(如:复姓),因此选姓氏不能像选名字那样一个一个字选
		 * 因此要将xings转成数组
		 */
		// 先随机选姓氏
		Random r = new Random();
		String[] xingArr = xings.split(" ");
		int index = r.nextInt(xingArr.length);
		String xing = xingArr[index];

		// 有了姓氏,再调用上面的选名字的方法,就OK了
		return build(xing, length);
	}

	/**
	 * 随机生成2~3个字的名字
	 * @return
	 */
	public static String build() {
		int length = r.nextInt(2) + 2;
		return build(length);
	}

	public static void main(String[] args) {
		System.out.println("\r\n指定姓氏造100个3个字的名字");
		for (int i = 0; i < 100; i++) {
			System.out.print(build("廖", 3) + ",");
			if ((i + 1) % 10 == 0) {
				System.out.println();
			}
		}
		
		System.out.println("\r\n不指定姓氏造100个3个字的名字");
		for (int i = 0; i < 100; i++) {
			System.out.print(build(3) + ",");
			if ((i + 1) % 10 == 0) {
				System.out.println();
			}
		}
		
		System.out.println("\r\n随机造100个名2~3个字的字");
		for (int i = 0; i < 100; i++) {
			System.out.print(build() + "\t");
			if ((i + 1) % 10 == 0) {
				System.out.println();
			}
		}

	}
}

 

代码简单干净,易于扩展。 随机生成用户名样例: 339063 77188 fengjr1980@yeah.net 97133 xupe19870102@sohu.com 18955990722 2145028 25070167 299966 13329809029 18739552501 77223 725525865 cheng1991 chub1974 13290062609 wangf19750725 caot19850619 545121 qianih19760611@msn.com 15208376363 xieww1979 shixd0904@126.com 18035677437 80892 18967033182 18923271615 15506730128 19741 fangi0713 15829813954 58285 yuanr19730429 shenpk 79607 15430 15226507276 13905108731 71852 qianmp19900629 15578331045 28116 18636868380 41560 zhengk1009@qq.com chuh19901023 269195 5678146 29585 18416167445 konghs1014 13404997586 30505 13647749758 13153649262 18779413966 wangqq1985 18906839566 18915522113 13392180833 1539516 zhaod19960502@ask.com 422424 heee0615 fengc@163.com 39174 xuyv19780415 15463681074 700812 73013 xuh0513 15505384990 hedd19940702 54021 xum19930812 youy1991 qiner 18033283015 yangwc 57195 qinu shenk0513 zhoufg 94597 95435 zhanvn1985 qiankh0104@ask.com kongw1993 zhuhv 15922309734 15015131852 15617928674 13135363801 18249225151 81438 13163635474 18615772400 hes0510 460915 wum19781014 491159 shenh1973 625701 34613 15732006897 fengdk1985 18517435664 13412117745 10157 chuza1993@163.com zhaokk0810@sina.com 34270 7744626 sunb0122 71114 91762 18506579548 yangmy0227 18791566645 13250565847 jiangvk1977 15250922291 37579 wangci1965 wangpq wango19850516 18531237843 18589683471 hegl1990 18714299209 zhant@gmail.com 29016 zhux1969 xiez1113 zhengtw 15490897758 18917969768 18149215132 18608279756 17149 18644736737 zhaov19880816 xuy@aol.com 5854142 18408454618 qinl1988 xubl1990 18852302621 18985792169 42928 18622907192 fanggs19960616@163.com 25150 47585 15086377222 617299 13447565144 668953950 4342797 18638890078 fangiq0615 zhuo19701127@ask.com 421528 15690966759 18058824538 18194138008 15770603106 heag0813 15793392577 470979 18402649812 1791830 18397977938 shukj19960528 87052642 chulu0119 jiangj1986 13210747847 47359 80638214 zhuey0405 94017 13636960571 18939715988 yuani0529@msn.com 58081 caodm1989 18420167788 13951603849 10205 164883 15513277337 29553 15011669462 87997 zhanji 29763568 13032055621 13617051541 lit
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值