汉字转拼音(域名)

本文探讨了一种创新的人事管理系统解决方案,通过为每位员工分配唯一的域名来区分用户重名问题,实现基于域名的登陆方式。文中详细介绍了从汉字到全拼的转换方法,并通过代码示例展示了如何生成唯一域名。最后,通过实例验证了方法的有效性,确保了员工在系统中的身份独特性。

最近做人事管理系统,发现添加用户名时有很多重名的情况,导致在登陆时根本无法区别是哪个用户,于是借鉴了以前公司的域名管理方法

即为每个用户分配一个域名(不会重复的),然后登陆时按照域名密码登陆。

例如:张三对应的域名(zhangs),张山就会对应(zhangs-a),张顺就对应(zhangs-b)依次类推

package ray.main;

import java.util.ArrayList;
import java.util.List;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

public class ChineseToEnglish {

	// 将字符串转移为ASCII码
	public static String getCnASCII(String cnStr) {
		StringBuffer strBuf = new StringBuffer();
		byte[] bGBK = cnStr.getBytes();
		for (int i = 0; i < bGBK.length; i++) {
			strBuf.append(Integer.toHexString(bGBK[i] & 0xff));
		}
		return strBuf.toString();
	}

	// 将汉字转换为全拼
	public static String getPingYin(String src) {

		char[] t1 = null;
		t1 = src.toCharArray();
		String[] t2 = new String[t1.length];
		HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();

		t3.setCaseType(HanyuPinyinCaseType.LOWERCASE); // 控制拼音大小写
		t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		t3.setVCharType(HanyuPinyinVCharType.WITH_V);
		String t4 = "";
		int t0 = t1.length;
		try {
			for (int i = 0; i < t0; i++) {
				// 判断是否为汉字字符
				if (java.lang.Character.toString(t1[i]).matches("[\\u4E00-\\u9FA5]+")) {
					t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);
					t4 += t2[0];
				} else
					t4 += java.lang.Character.toString(t1[i]);
			}
			// System.out.println(t4);
			return t4;
		} catch (BadHanyuPinyinOutputFormatCombination e1) {
			e1.printStackTrace();
		}
		return t4;
	}

	// 返回中文的首字母
	public static String getPinYinHeadChar(String str) {

		String convert = "";
		for (int j = 0; j < str.length(); j++) {
			char word = str.charAt(j);
			String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);
			if (pinyinArray != null) {
				convert += pinyinArray[0].charAt(0);
			} else {
				convert += word;
			}
		}
		return convert;
	}

	// 取汉字首个全拼和其他汉字首字母leip/zhangwp
	public static String getFirstPinYinAndHeaderChar(String str) {
		if((null == str) || str.length() == 0){
			return null;
		}
		StringBuilder sb = new StringBuilder();
		// 得到首个汉字全拼
		String s = getPingYin(str.charAt(0) + "");
		sb.append(s);
		// 得到其他汉字的首字母
		for (int i = 1; i < str.length(); i++) {
			s = getPinYinHeadChar(str.charAt(i) + "");
			sb.append(s);
		}
		return sb.toString();
	}

	// 递归生成唯一的名字,在名字后加 -a/ -b /-c
	public static String genUniqueName(String srcName, char separator, List<String> lists) {
		if ((null == srcName) || (lists == null)) {
			return null;
		}
		String name = getFirstPinYinAndHeaderChar(srcName);
		if(name == null){
			return null;
		}
		if (lists.indexOf(name) == -1) {
			return name;
		}
		if(separator == '\0'){
			separator = '-';
		}
		String sTmp = null;
		for (char c = 'a'; c <= 'd'; c++) {
			sTmp = name + separator + c;
			if (lists.indexOf(sTmp) == -1) {
				return sTmp;
			}
		}
		String result = null;
		for(char c = 'a'; c <= 'd'; c++){
			sTmp = name + separator + c;
			result = genUniqueName(sTmp, separator, lists);
			if(!sTmp.equalsIgnoreCase(result)){
				return result;
			}
		}
		return null;
	}

	public static void main(String[] args) {
		System.out.println(getPingYin("雷盼"));
		System.out.println(getPinYinHeadChar("雷子诺"));
		System.out.println(getCnASCII("张文苹"));
		System.out.println(getFirstPinYinAndHeaderChar("张文凭"));
		List<String> list = new ArrayList<String>();
		list.add("zhangwp");
		list.add("zhangwp-a");
		list.add("zhangwp-b");
		list.add("zhangwp-d");
		list.add("zhangwp-c");
		//List可以到时候对应数据库中所有用户域名的集合
		System.out.println(genUniqueName("张文苹", '-', list));
	}
}

输出:

leipan
lzn
d5c5cec4c6bb
zhangwp
zhangwp-a-a

过程中需要用到一个jar包 jar包下载地址


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值