
下面是中文转换成拼音的一个程序。需要下载jar包!下载不到的可以来找我!
可以生成 中国 zhongguo 或zg
package cn;
import netsourceforgepinyin4jPinyinHelper;
import netsourceforgepinyin4jformatHanyuPinyinCaseType;
import netsourceforgepinyin4jformatHanyuPinyinOutputFormat;
import netsourceforgepinyin4jformatHanyuPinyinToneType;
import netsourceforgepinyin4jformatexceptionBadHanyuPinyinOutputFormatCombination;
/
@author xuke
/
public class Pinyin4J {
/
汉字转换位汉语拼音首字母,英文字符不变
@param chines
汉字
@return 拼音
/
public static String converterToFirstSpell(String chines) {
String pinyinName = "";
char[] nameChar = chinestoCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
defaultFormatsetCaseType(HanyuPinyinCaseTypeLOWERCASE);
defaultFormatsetToneType(HanyuPinyinToneTypeWITHOUT_TONE);
for (int i = 0; i < nameCharlength; i++) {
if (nameChar[i] > 128) {
try {
pinyinName += PinyinHelpertoHanyuPinyinStringArray(
nameChar[i], defaultFormat)[0]charAt(0);
} catch (BadHanyuPinyinOutputFormatCombination e) {
eprintStackTrace();
}
} else {
pinyinName += nameChar[i];
}
}
return pinyinName;
}
/
汉字转换位汉语拼音,英文字符不变
@param chines
汉字
@return 拼音
/
public static String converterToSpell(String chines) {
String pinyinName = "";
char[] nameChar = chinestoCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
defaultFormatsetCaseType(HanyuPinyinCaseTypeLOWERCASE);
defaultFormatsetToneType(HanyuPinyinToneTypeWITHOUT_TONE);
for (int i = 0; i < nameCharlength; i++) {
if (nameChar[i] > 128) {
try {
pinyinName += PinyinHelpertoHanyuPinyinStringArray(
nameChar[i], defaultFormat)[0];
} catch (BadHanyuPinyinOutputFormatCombination e) {
eprintStackTrace();
}
} else {
pinyinName += nameChar[i];
}
}
return pinyinName;
}
public static void main(String[] args) {
Systemoutprintln(converterToSpell("百度"));
}
}
获取首字母需要对汉字表和字母表进行映射,如下示例代码是以gb2312编码为入手点,进行匹配的,也可以使用gbk、utf-8等编码进行匹配,但代码就完全不同了。
示例代码如下:
public class FirstLetterUtils {
// 简体中文的编码范围从B0A1(45217)一直到F7FE(63486)
private static int BEGIN = 45217;
private static int END = 63486;
// 按照声 母表示,这个表是在GB2312中的出现的第一个汉字,也就是说“啊”是代表首字母a的第一个汉字。
// i, u, v都不做声母, 自定规则跟随前面的字母
private static char[] chartable = { '啊', '芭', '擦', '搭', '蛾', '发', '噶', '哈', '哈', '击', '喀', '垃', '妈', '拿', '哦', '啪', '期', '然', '撒', '塌', '塌', '塌', '挖', '昔', '压', '匝', };
// 二十六个字母区间对应二十七个端点
// GB2312码汉字区间十进制表示
private static int[] table = new int[27];
// 对应首字母区间表
private static char[] initialtable = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'h', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 't', 't', 'w', 'x', 'y', 'z', };
// 初始化
static {
for (int i = 0; i < 26; i++) {
table[i] = gbValue(chartable[i]);// 得到GB2312码的首字母区间端点表,十进制。
}
table[26] = END;// 区间表结尾
}
// ------------------------public方法区------------------------
// 根据一个包含汉字的字符串返回一个汉字拼音首字母的字符串 最重要的一个方法,思路如下:一个个字符读入、判断、输出
public static String cn2py(String SourceStr) {
String Result = "";
int StrLength = SourceStrlength();
int i;
try {
for (i = 0; i < StrLength; i++) {
Result += Char2Initial(SourceStrcharAt(i));
}
} catch (Exception e) {
Result = "";
eprintStackTrace();
}
return Result;
}
// ------------------------private方法区------------------------
/
输入字符,得到他的声母,英文字母返回对应的大写字母,其他非简体汉字返回 '0'
/
private static char Char2Initial(char ch) {
// 对英文字母的处理:小写字母转换为大写,大写的直接返回
if (ch >= 'a' && ch <= 'z') {
return (char) (ch - 'a' + 'A');
}
if (ch >= 'A' && ch <= 'Z') {
return ch;
}
// 对非英文字母的处理:转化为首字母,然后判断是否在码表范围内,
// 若不是,则直接返回。
// 若是,则在码表内的进行判断。
int gb = gbValue(ch);// 汉字转换首字母
if ((gb < BEGIN) || (gb > END))// 在码表区间之前,直接返回
{
return ch;
}
int i;
for (i = 0; i < 26; i++) {// 判断匹配码表区间,匹配到就break,判断区间形如“[,)”
if ((gb >= table[i]) && (gb < table[i + 1])) {
break;
}
}
if (gb == END) {// 补上GB2312区间最右端
i = 25;
}
return initialtable[i]; // 在码表区间中,返回首字母
}
/
取出汉字的编码 cn 汉字
/
private static int gbValue(char ch) {// 将一个汉字(GB2312)转换为十进制表示。
String str = new String();
str += ch;
try {
byte[] bytes = strgetBytes("GB2312");
if (byteslength < 2) {
return 0;
}
return (bytes[0] << 8 & 0xff00) + (bytes[1] & 0xff);
} catch (Exception e) {
return 0;
}
}
public static void main(String[] args) throws Exception {
Systemoutprintln(cn2py("这是一个获取首字母的class"));
}
}
参考博文:>
下满给出示例代码,希望对你有帮助
Java中判断字符串的编码有两种思路:
一种是根据byte的长度判断,英文的字母数字好标点符号都是一个byte,且值在0-255之间
另一种是根据中文的Unicode取值范围判断,这个就是把所以的范围都包含,才能判断正确,参考unicode中文范围:>
示例代码:
import javautilregexMatcher;import javautilregexPattern;
public class StringTest {
//英文占1byte,非英文(可认为是中文)占2byte,根据这个特性来判断字符
public static boolean checkChar(char ch) {
if ((ch + "")getBytes()length == 1) {
return true;//英文
} else {
return false;//中文
}
}
public static String checkString(String str) {
String res = "";
if (str != null) {
for (int i = 0; i < strlength(); i++) {
//只要字符串中有中文则为中文
if (!checkChar(strcharAt(i))) {
res = "中文";
break;
} else {
res = "英文";
}
}
}
return res;
}
//判断是不是中文
public static boolean isChinese(char c) {
CharacterUnicodeBlock ub = CharacterUnicodeBlockof(c);
if (ub == CharacterUnicodeBlockCJK_UNIFIED_IDEOGRAPHS
|| ub == CharacterUnicodeBlockCJK_COMPATIBILITY_IDEOGRAPHS
|| ub == CharacterUnicodeBlockCJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
|| ub == CharacterUnicodeBlockGENERAL_PUNCTUATION
|| ub == CharacterUnicodeBlockCJK_SYMBOLS_AND_PUNCTUATION
|| ub == CharacterUnicodeBlockHALFWIDTH_AND_FULLWIDTH_FORMS) {
return true;
}
return false;
}
//判断是不是英文字母
public static boolean isEnglish(String charaString) {
return charaStringmatches("^[a-zA-Z]");
}
//根据中文unicode范围判断u4e00 ~ u9fa5不全
public static String isChinese(String str) {
String regEx1 = "[\\u4e00-\\u9fa5]+";
String regEx2 = "[\\uFF00-\\uFFEF]+";
String regEx3 = "[\\u2E80-\\u2EFF]+";
String regEx4 = "[\\u3000-\\u303F]+";
String regEx5 = "[\\u31C0-\\u31EF]+";
Pattern p1 = Patterncompile(regEx1);
Pattern p2 = Patterncompile(regEx2);
Pattern p3 = Patterncompile(regEx3);
Pattern p4 = Patterncompile(regEx4);
Pattern p5 = Patterncompile(regEx5);
Matcher m1 = p1matcher(str);
Matcher m2 = p2matcher(str);
Matcher m3 = p3matcher(str);
Matcher m4 = p4matcher(str);
Matcher m5 = p5matcher(str);
if (m1find() || m2find() || m3find() || m4find() || m5find())
return "中文";
else
return "英文";
}
public static void main(String[] args) {
Systemoutprintln("使用长度判断:");
Systemoutprintln(checkString("Hello++"));
Systemoutprintln(checkString("Hello++。、,?"));
Systemoutprintln(checkString("Hello++编程"));
Systemoutprintln(checkString("编程"));
Systemoutprintln("\r\n使用正则表达式判断:");
Systemoutprintln(isChinese("Hello++"));
Systemoutprintln(isChinese("Hello++。、,?"));
Systemoutprintln(isChinese("Hello++编程"));
Systemoutprintln(isChinese("编程"));
Systemoutprintln("\r\n使用CharacterUnicodeBlock");
Systemoutprintln(isChinese('h')"中文":"英文");
Systemoutprintln(isChinese(',')"中文":"英文");
Systemoutprintln(isChinese('。')"中文":"英文");
Systemoutprintln(isChinese('编')"中文":"英文");
}
}
运行结果:
使用长度判断:
英文
中文
中文
中文
使用正则表达式判断:
英文
中文
中文
中文
使用CharacterUnicodeBlock
英文
英文
中文
中文
以上就是关于谁做过java 同音字查询,请赐教一下,有源码更好。全部的内容,包括:谁做过java 同音字查询,请赐教一下,有源码更好。、java怎么根据汉字获取字的拼音首字母、java判断一个字符串是中文还是英文等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)