java拼音查询_Java汉字获取拼音、笔划、偏旁部首
本文需要配合文本库使用,在文章底部附文本库文件 废话不多说 直接上代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
/**
* 汉字字典,可以查询汉字的拼音,部首和笔画
*
*/
public class HanDict {
/** 汉字最小unicode值 */
public static final char HAN_MIN = '一';
/** 汉字最大unicode值 */
public static final char HAN_MAX = '龥';
/** 汉字数据,从"一"到"龥" */
public static final String[] HAN_DATA = new String[HAN_MAX - HAN_MIN + 1];
/** 汉字数据文件 */
private static final String HAN_DATA_FILE = "data.txt";
/** 汉字数据文件编码 */
private static final Charset FILE_CHARSET = Charset.forName("utf-8");
/** 拼音数据下标 */
private static final int INDEX_PY = 0;
/** 部首数据下标 */
private static final int INDEX_BS = 1;
/** 笔画数据下标 */
private static final int INDEX_BH = 2;
/** 拼音数据(中文字母注音)下标 */
private static final int INDEX_PY_HAN = 0;
/** 拼音数据(英文字母注音)下标 */
private static final int INDEX_PY_EN = 1;
static {
try {
loadHanData();
} catch (IOException e) {
System.err.println("载入汉字数据错误:" + e.getMessage());
}
}
/**
* 获取汉字笔画,如 "大"的笔画为"134"
* 12345 对应 "横竖撇捺折"
*
* @param str
* 单个汉字
* @return String
*/
public static String getBH(String str) {
if (str == null || str.isEmpty()) {
return "";
}
return getBH(str.charAt(0));
}
/**
* 获取汉字笔画,如 "大"的笔画为"134"
* 12345 对应 "横竖撇捺折"
*
* @param ch
* 汉字
* @return String
*/
public static String getBH(char ch) {
if (isHan(ch)) {
return HAN_DATA[ch - HAN_MIN].split("\\|")[INDEX_BH];
}
return "";
}
/**
* 获取汉字部首,如果没有部首,返回""
*
* @param str
* 单个汉字
* @return String
*/
public static String getBS(String str) {
if (str == null || str.isEmpty()) {
return "";
}
return getBS(str.charAt(0));
}
/**
* 获取汉字部首,如果没有部首,返回""
*
* @param ch
* 汉字
* @return String
*/
public static String getBS(char ch) {
if (isHan(ch)) {
return HAN_DATA[ch - HAN_MIN].split("\\|")[INDEX_BS];
}
return "";
}
/**
* 返回单个汉字的读音列表,读音可能是多个
*
* @param ch
* 汉字
* @param useHanFormat
* true=汉字字母注音,如yī,false=英文字母注音,如yi1
* @return List
*/
public static List getPY(char ch, boolean useHanFormat) {
List list = new ArrayList();
if (isHan(ch)) {
int i = useHanFormat ? INDEX_PY_HAN : INDEX_PY_EN;
String pyStr = HAN_DATA[ch - HAN_MIN].split("\\|")[INDEX_PY];
for (String py : pyStr.split(";")) {
list.add(py.split(",")[i]);
}
}
return list;
}
/**
* 返回汉字字符串注音,如果字符串中字符不是汉字,那么使用原字符。
* 注意:对于有多个注音的汉字,我们取第一个注音。
* 如:"今年的收入为123万。" 返回的结果为:"jīn nián de shōu rù wèi 123 wàn 。"
*
* @param str
* 汉字字符串
* @param useHanFormat
* true=汉字字母注音,如yī,false=英文字母注音,如yi1
* @return
*/
public static String getPY(String str, boolean useHanFormat) {
if (str == null) {
return "";
}
boolean lastBlank = true;
StringBuffer sb = new StringBuffer();
for (char ch : str.toCharArray()) {
if (isHan(ch)) {
List pyList = getPY(ch, useHanFormat);
if (!pyList.isEmpty()) {
if (!lastBlank) {
sb.append(" ");
}
sb.append(pyList.get(0)).append(' ');
lastBlank = true;
}
} else {
sb.append(ch);
lastBlank = false;
}
}
return sb.toString();
}
/**
* 检查是否汉字
*
* @param ch
* @return
*/
private static boolean isHan(char ch) {
if (ch >= HAN_MIN && ch <= HAN_MAX) {
return true;
}
return false;
}
private static void loadHanData() throws IOException {
InputStream in = HanDict.class.getResourceAsStream(HAN_DATA_FILE);
if (in == null) {
throw new IOException(HAN_DATA_FILE + "汉字数据文件不存在!");
}
try {
BufferedReader br = new BufferedReader(new InputStreamReader(in, FILE_CHARSET));
String line = null;
int index = 0;
while ((line = br.readLine()) != null) {
HAN_DATA[index++] = line;
}
} finally {
if (in != null) {
in.close();
}
}
}
/**
* 使用测试
*/
public static void main(String[] args) {
char ch = '法';
System.out.println(ch + "的拼音(中式注音)为:" + HanDict.getPY(ch, true));
System.out.println(ch + "的拼音(英式注音)为:" + HanDict.getPY(ch, false));
System.out.println(ch + "的部首为 :" + HanDict.getBS(ch));
System.out.println(ch + "的部首笔画为 :" + HanDict.getBH(HanDict.getBS(ch)));
System.out.println(ch + "的笔画顺序为 :" + HanDict.getBH(ch));
System.out.println(ch + "的笔画数为 :" + HanDict.getBH(ch).length());
System.out.println();
ch = '大';
System.out.println(ch + "的拼音(中式注音)为:" + HanDict.getPY(ch, true));
System.out.println(ch + "的拼音(英式注音)为:" + HanDict.getPY(ch, false));
System.out.println(ch + "的部首为 :" + HanDict.getBS(ch));
System.out.println(ch + "的部首笔画为 :" + HanDict.getBH(HanDict.getBS(ch)));
System.out.println(ch + "的笔画顺序为 :" + HanDict.getBH(ch));
System.out.println(ch + "的笔画数为 :" + HanDict.getBH(ch).length());
System.out.println();
String str = "今年的收入为123万。";
System.out.println(str + " 的拼音(中式)为:" + getPY(str, true));
System.out.println(str + " 的拼音(英式)为:" + getPY(str, false));
}
}
代码及文本库网盘链接:
链接: https://pan.baidu.com/s/1sjqY14e536r8_2EJBGI4DQ 提取码: 5mne
本文地址:https://blog.csdn.net/qq_32909681/article/details/107665277
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!
java拼音查询_Java汉字获取拼音、笔划、偏旁部首相关推荐
- php 获取 拼音,php根据汉字获取拼音(php基于拼音搜索实现原理)
php根据汉字获取拼音(php基于拼音搜索实现原理) 代码一:获取字符串汉字首字母,兼容GBK和UTF-8<?php function getfirstchar($s0){ //获取单个汉字拼音 ...
- java 汉字转拼音原理_java 汉字转拼音
最近在项目中有需求将汉字转拼音,找到了相关资料,整理如下 /* * @1 版本说明: 2013-07-27 pj add * * @2 函数说明:返回字符串的全拼 */ public static S ...
- java 汉字按拼音排序_Java汉字按照拼音排序
@Test public void testSortPinyin() { Collator cmp = Collator.getInstance(java.util.Locale.CHINA); St ...
- java 汉字转拼音工具_java汉字转拼音工具类
public classPinYinUtils {public staticHanyuPinyinOutputFormat PINYIN_FORMAT;static{ PINYIN_FORMAT= n ...
- python汉字拼音查询_Python汉字转拼音
1.[代码]汉字转拼音 # -*- coding: utf-8 -*- # ------------------------------------------------------------ # ...
- 记录一下:Java 汉字获取拼音或首字母工具类
记录一下:Java 汉字获取拼音或首字母工具类 Maven依赖配置 Java代码 本文主要记录一下在Java中,如何将字符串中的中文转化为拼音,获取汉字串拼音首字母,获取汉字串拼音的工具类,以及相关的 ...
- java hanyupinyinoutputformat();_Java汉字转拼音pinyin4j用法
Java汉字转拼音pinyin4j用法 在学习编程的过程中,我觉得不止要获得课本的知识, 更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,更多Java学习,请登陆疯狂java官网. ...
- javaEE pinyin4j,根据汉字获取拼音
jar包下载:https://pan.baidu.com/s/1SAaONZxCMMfdxOFN1kzbrQ 密码:a71c Pinyin4JTest.java(测试类): package cn ...
- mysql 查询汉字的全拼音以及查询各个汉字的拼音首字母
查询汉字的全拼音 -- 创建汉字拼音对照临时表 CREATE TABLE IF NOT EXISTS `t_base_pinyin` (`pin_yin_` varchar(255) CHARACTE ...
- mysql 汉字拼音_Mysql中文汉字转拼音的实现(每个汉字转换全拼)
一.创建拼音对照表 -- 创建汉字拼音对照临时表 CREATE TABLE IF NOT EXISTS `t_base_pinyin` ( `pin_yin_` varchar(255) CHARAC ...
最新文章
- 转_前端开发技术概要
- 修改2k自动登陆的脚本
- SFTP例子2----使用JSch实现SFTP文件传输
- 登陆工行网上银行报60058017错误及输入正确网银密码提示密码不正确
- 不同的写法 其中 1 2 (试了下 没有效果 ,先记载这里把)
- (转)API SOCKET基础(一) TCP建立连接并通信
- Python基础(六)--类与对象
- 蛋糕连锁店网站管理系统v1.5.1-企业建站系统源码
- 深度学习笔记(47) 神经风格迁移
- Android Menu
- MySQL 的主从复制
- html模拟手机桌面,html+css+js 模拟win7桌面
- Vue-pdf预览pdf文档
- 2018年系统架构设计师案例分析真题及详细答案解析
- UPNP端口映射简单流程
- openid与商户appid不匹配
- Python北京二手房房价数据集分析
- 腾讯qlv格式转换mp4为何转换后只有音频
- python下载安装教程电脑版,python下载好了怎么使用
- 我的世界服务器商店系统指令,我的世界自动商店指令 | 手游网游页游攻略大全...
热门文章
- 正弦函数的频谱图matlab,怎样用MATLAB画正弦函数以及怎样看频谱图?
- mac 当前位置打开终端
- linux使用tab键联想,Linux 下python 如何设置使用tab键
- Java中.setvalue(-1)_Java State.setValue方法代碼示例
- linux内核启动过程分析
- Android Activity 的详细启动过程分析
- ios icon 自动生成
- 地图比例尺与空间分辨率之间的关系_地图比例尺与分辨率
- 短视频运营小技巧,掌握推荐机制很重要,吸粉引流也不难
- 一位技术主管的十年编程经验总结