java 汉字字典,获取汉字拼音,拼音首字母,五笔,笔画,笔画顺序

这篇博客介绍了如何使用Java实现一个汉字字典,包括从字典文件获取汉字的拼音、拼音首字母、五笔编码和笔画信息。作者提供了项目结构和关键类的说明,如Dic.java和Sample.java,并分享了获取汉字信息的来源——汉典网站。项目不依赖第三方包,适用于JDK1.6环境,且强调源文件应使用UTF-8编码。
摘要由CSDN通过智能技术生成

最新的可以下载的包(原来写的丢失了,重新写了个):

http://download.csdn.net/detail/wssiqi/6394057

如果地址不可访问,查看我的资源,看还在不。~~~


环境:eclipsse, jdk1.6, 没有使用第三方的包,都是JDK有的。

注意,项目源文件我都使用的是UTF-8的编码格式,如果不是,代码里面的汉字注释会显示乱码。

设置UTF-8:windows->Preferences->General->Workspace 页面上Text file encoding,选择Other UTF-8

项目结构:


1.字典文件

dic.txt 下载地址:http://download.csdn.net/detail/wssiqi/5056993

这里只摘录一部分内容,里面共收录了20902个汉字

19968,一,一,1,1,GGLL,A,yi1,yī
19969,丁,一,2,12,SGH,AI,ding1,dīng,zheng1,zhēng
19970,丂,一,2,15,GNV,AZVV,kao3,kǎo,qiao3,qiǎo,yu2,yú
19971,七,一,2,15,AGN,HD,qi1,qī
19972,丄,一,2,21,HGD,IAVV,shang4,shàng
19973,丅,一,2,12,GHK,AIAA,xia4,xià
19974,丆,一,2,13,DGT,GDAA,han3,hǎn
19975,万,一,3,153,DNV,,wan4,wàn,mo4,mò
19976,丈,一,3,134,DYI,AOS,zhang4,zhàng
19977,三,一,3,111,DGGG,CD,san1,sān
19978,上,一,3,211,HHGG,IDA,shang3,shǎng,shang4,shàng
19979,下,一,3,124,GHI,AID,xia4,xià
19980,丌,一,3,132,GJK,AND,ji1,jī,qi2,qí
19981,不,一,4,1324,GII,GI,fou3,fǒu,bu4,bù
19982,与,一,3,151,GNGD,AZA,yu4,yù,yu3,yǔ,yu2,yú
19983,丏,一,4,1255,GHNN,AIZY,mian3,miǎn
19984,丐,一,4,1215,GHNV,AIZ,gai4,gài
19985,丑,一,4,5211,NFD,XED,chou3,chǒu
19986,丒,一,4,5341,VYGF,YDSA,chou3,chǒu

2.Dic.java

package com.siqi.dict;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

/**
 * 汉字本地字典。 <br/>
 * 本地字典数据来自于<a href=http://www.zdic.net/search/?c=2>汉典</a>
 * 实现了一下常用的需求,例如返回拼音,五笔,拼音首字母,笔画数目,笔画顺序。
 * 
 * @author siqi
 * 
 */
public class Dic {

	/**
	 * 设置是否输出调试信息
	 */
	private static boolean DEBUG = true;

	/**
	 * 默认编码
	 */
	public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");

	/**
	 * 汉字Unicode最小编码
	 */
	public static final int CN_U16_CODE_MIN = 0x4e00;

	/**
	 * 汉字Unicode最大编码
	 */
	public static final int CN_U16_CODE_MAX = 0x9fa5;

	/**
	 * 本地字典文件名
	 */
	public static final String DIC_FILENAME = "dic.txt";

	/**
	 * 字典数据
	 */
	public static byte[] bytes = new byte[0];
	
	/**
	 * 字典汉字数目
	 */
	public static int count = 0;

	/**
	 * 汉字unicode值在一条汉字信息的位置<br/>
	 * 汉字信息,例:"25171,打,扌,5,12112,RSH,DAI,da3,dǎ,da2,dá"
	 */
	public static int INDEX_UNICODE = 0;
	/**
	 * 汉字在一条汉字信息的位置<br/>
	 * 汉字信息,例:"25171,打,扌,5,12112,RSH,DAI,da3,dǎ,da2,dá"
	 */
	public static int INDEX_CHARACTER = 1;
	/**
	 * 汉字部首在一条汉字信息的位置<br/>
	 * 汉字信息,例:"25171,打,扌,5,12112,RSH,DAI,da3,dǎ,da2,dá"
	 */
	public static int INDEX_BUSHOU = 2;
	/**
	 * 汉字笔画在一条汉字信息的位置<br/>
	 * 汉字信息,例:"25171,打,扌,5,12112,RSH,DAI,da3,dǎ,da2,dá"
	 */
	public static int INDEX_BIHUA = 3;
	/**
	 * 汉字笔画顺序在一条汉字信息的位置<br/>
	 * 汉字信息,例:"25171,打,扌,5,12112,RSH,DAI,da3,dǎ,da2,dá"
	 */
	public static int INDEX_BISHUN = 4;
	/**
	 * 汉字五笔在一条汉字信息的位置<br/>
	 * 汉字信息,例:"25171,打,扌,5,12112,RSH,DAI,da3,dǎ,da2,dá"
	 */
	public static int INDEX_WUBI = 5;
	/**
	 * 汉字郑码在一条汉字信息的位置<br/>
	 * 汉字信息,例:"25171,打,扌,5,12112,RSH,DAI,da3,dǎ,da2,dá"
	 */
	public static int INDEX_ZHENGMA = 6;
	/**
	 * 第一个汉字拼音(英文字母)在一条汉字信息的位置<br/>
	 * 汉字信息,例:"25171,打,扌,5,12112,RSH,DAI,da3,dǎ,da2,dá"
	 */
	public static int INDEX_PINYIN_EN = 7;
	/**
	 * 第一个汉字拼音(中文字母)在一条汉字信息的位置<br/>
	 * 汉字信息,例:"25171,打,扌,5,12112,RSH,DAI,da3,dǎ,da2,dá"
	 */
	public static int INDEX_PINYIN_CN = 8;

	/**
	 * 装载字典
	 */
	static {
		long time = System.currentTimeMillis();
		
		try {
			LoadDictionary();
			count = count();
			if (DEBUG) {
				System.out.println("成功载入字典" + new File(DIC_FILENAME).getCanonicalPath() + " ,用时:"
						+ (System.currentTimeMillis() - time) + "毫秒,载入字符数"+count);
			}
		} catch (Exception e) {
			try {
				System.out.println("载入字典失败" + new File(DIC_FILENAME).getCanonicalPath()+"\r\n");
			} catch (Exception e1) {
			}
			e.printStackTrace();
		}

	}

	/**
	 * 获取汉字unicode值
	 * 
	 * @param ch
	 *            汉字
	 * @return 返回汉字的unicode值
	 * @throws Exception
	 */
	public static String GetUnicode(Character ch) throws Exception {
		return GetCharInfo(ch, INDEX_UNICODE);
	}

	/**
	 * 获取拼音(英文字母)
	 * 
	 * @param ch
	 *            单个汉字字符
	 * @return 返回汉字的英文字母拼音。如 "大"->"da4"。
	 * @throws Exception
	 */
	public static String GetPinyinEn(Character ch) throws Exception {
		return GetCharInfo(ch, INDEX_PINYIN_EN);
	}

	/**
	 * 返回汉字字符串的拼音(英文字母)
	 * 
	 * @param str
	 *            汉字字符串
	 * @return 返回汉字字符串的拼音。将字符串中的汉字替换成拼音,其他字符不变。拼音中间会有空格。 注意,对于多音字,返回的拼音可能不正确。
	 * @throws Exception
	 */
	public static String GetPinyinEn(String str) throws Exception {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < str.length(); i++) {
			char ch = str.charAt(i);
			if (isChineseChar(ch)) {
				sb.append(GetPinyinEn(ch) + " ");
			} else {
				sb.append(ch);
			}
		}

		return sb.toString().trim();
	}

	/**
	 * 获取拼音(中文字母)
	 * 
	 * @param ch
	 *            单个汉字字符
	 * @return 返回汉字的中文字母拼音。如 "打"->"dǎ"。
	 * @throws Exception
	 */
	public static String GetPinyinCn(Character ch) throws Exception {
		return GetCharInfo(ch, INDEX_PINYIN_CN);
	}

	/**
	 * 返回汉字字符串的拼
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值