本文需要配合文本库使用,在文章底部附文本库文件 废话不多说 直接上代码:

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"<br>* 12345 对应 "横竖撇捺折"* * @param str*            单个汉字* @return String*/public static String getBH(String str) {if (str == null || str.isEmpty()) {return "";}return getBH(str.charAt(0));}/*** 获取汉字笔画,如 "大"的笔画为"134"<br>* 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<String> getPY(char ch, boolean useHanFormat) {List<String> list = new ArrayList<String>();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;}/*** 返回汉字字符串注音,如果字符串中字符不是汉字,那么使用原字符。<br>* 注意:对于有多个注音的汉字,我们取第一个注音。 <br>* 如:"今年的收入为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<String> 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/1EvA-fhS_bXQGA9P2C6XUcQ 提取码: ga7j

Java汉字获取拼音、笔划、偏旁部首相关推荐

  1. 记录一下:Java 汉字获取拼音或首字母工具类

    记录一下:Java 汉字获取拼音或首字母工具类 Maven依赖配置 Java代码 本文主要记录一下在Java中,如何将字符串中的中文转化为拼音,获取汉字串拼音首字母,获取汉字串拼音的工具类,以及相关的 ...

  2. java汉字获取拼音的方法

    可使用的jar包如下: <dependency> <groupId>com.belerweb</groupId> <artifactId>pinyin4 ...

  3. java汉字获取首字母

    原文链接:java汉字获取首字母 - 走看看 前言 在项目中很多时候我们需要获取姓名或者名称的首字母或者全拼,以用于模糊查询或者字母查询,在这里分享一个实例:供小伙伴们参考. 导入jar包 <d ...

  4. javaEE pinyin4j,根据汉字获取拼音

    jar包下载:https://pan.baidu.com/s/1SAaONZxCMMfdxOFN1kzbrQ    密码:a71c Pinyin4JTest.java(测试类): package cn ...

  5. java汉字转拼音工具类源代码

    原文:java汉字转拼音工具类源代码 源代码下载地址:http://www.zuidaima.com/share/1550463387880448.htm 汉字转拼音 Pinyin pinyin = ...

  6. php 获取 拼音,php根据汉字获取拼音(php基于拼音搜索实现原理)

    php根据汉字获取拼音(php基于拼音搜索实现原理) 代码一:获取字符串汉字首字母,兼容GBK和UTF-8<?php function getfirstchar($s0){ //获取单个汉字拼音 ...

  7. Java汉字转拼音(全拼、首字母拼)

    Java汉字转拼音(全拼.首字母拼) public class ChineseToEnglish { /*** 汉字转拼音* @param src* @return*/public static St ...

  8. java汉字转拼音(全拼、简拼)

    java汉字转拼音(全拼.简拼) <dependency><groupId>com.belerweb</groupId><artifactId>piny ...

  9. java 汉字转换拼音

    java 汉字转换拼音 maven依赖 <dependency><groupId>com.belerweb</groupId><artifactId>p ...

最新文章

  1. 2022-2028年中国橡胶板的制造行业发展战略规划及投资方向研究报告
  2. HPUX在oracle10g安装和卸载缩写
  3. 深入理解javascript 中的 delete(转)
  4. LeetCode 1293. 网格中的最短路径(DP/BFS)
  5. 在Access中执行SQL语句
  6. 推荐系统系列教程之十五:一网打尽协同过滤、矩阵分解和线性模型
  7. python指定目录生成.csv文件_python文件处理-根据csv文件内容,将对应图像拷贝到指定文件夹...
  8. 物理层传输介质(双绞线、光纤等)
  9. [译] RxJava 中的错误处理
  10. VirtualBox6.0安装及配置
  11. asp.net的条形码
  12. opencv 光流法
  13. Linux ❉ iptables详解
  14. Unity 3D学习(一)Unity 3D介绍与安装
  15. UE编辑器格式化SQL
  16. Java编写的“滑稽”表情屏保程序
  17. SQL Server中Id自增列的最大Id是多少
  18. 【HDU 5755】Gambler Bo(高斯消元)
  19. 中国数字商业核心产业链分布
  20. 把图片转换成视频-ffmpeg

热门文章

  1. 【博学谷学习记录】超强总结,用心分享 | MySQL
  2. 成都服务器销售熊掌号,熊掌号如何运营推广呢
  3. 2021年12月10日
  4. Hive的学习和使用
  5. 港科夜闻|香港科大(广州)与深圳湾实验室签署重要战略合作协议,共同促进粤港澳大湾区产业升级、社会发展与科技进步...
  6. 天猫店群玩法有流量销售额却上不去?可能是转化率出了问题。
  7. 桌面文件不见了怎么恢复?
  8. 防晒隔离产品基础知识大全
  9. Sequelize 中文API文档
  10. Python spider (二) Requests Lxml bs4