随机取名字
孩子的姓名是一辈子的事 , 此程序只是娱乐而已!!!
功能如下:
- 可以指定自己的姓(只保留一个姓氏即可)
- 名字可以使用三字经中的, 显示自己有文化,哈哈...
- 名字也可以在所有的汉字中随机(为了防止出现生僻字的情况去掉了生僻字,可用方法getChineseCharacter替换getChineseCharacterFromBook即可)
import java.io.UnsupportedEncodingException;
import java.util.Random;
public class ChineseNameUtils {
/**
* 百家姓
*/
private final static String[] LAST_NAME = {"柴","赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈", "褚"};
private static final String NAME = "人之初性本善性相近习相远苟不教性乃迁教之道贵以专昔孟母择邻处子不学断机杼窦燕";
public static String getChineseName() {
//获得一个随机的姓氏
Random random = new Random(System.currentTimeMillis());
int index = 0;
// 只有一个姓时,不随机姓
if (LAST_NAME.length !=1) {
index = random.nextInt(LAST_NAME.length - 1);
}
String name = LAST_NAME[index];
/* 从常用字中选取一个或两个字作为名 */
if (random.nextBoolean()) {
name += getChineseCharacterFromBook() +
getChineseCharacterFromBook();
} else {
name += getChineseCharacterFromBook();
}
return name;
}
public static String getChineseName2() {
//获得一个随机的姓氏
Random random = new Random(System.currentTimeMillis());
int index = 0;
// 只有一个姓时,不随机姓
if (LAST_NAME.length !=1) {
index = random.nextInt(LAST_NAME.length - 1);
}
String name = LAST_NAME[index];
/* 从常用字中选取一个或两个字作为名 */
if (random.nextBoolean()) {
name += getChineseCharacter() +
getChineseCharacter();
} else {
name += getChineseCharacter();
}
return name;
}
// 随机汉字
private static String getChineseCharacter() {
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 {
return new String(b, "GBk");//转成中文
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return "";
}
}
// 固定某些汉字
private static String getChineseCharacterFromBook() {
int random = new Random().nextInt(NAME.length());
return String.valueOf(NAME.charAt(random));
}
public static void main(String[] args) {
System.out.println(getChineseName());
// System.out.printf(getChineseName2());
}
}