最新的可以下载的包(原来写的丢失了,重新写了个):
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);
}
/**
* 返回汉字字符串的拼