获取文字或者段落的拼音算法

  • 获取文字或者段落的拼音算法

获取文字或者段落的拼音算法

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 = "远程文档地址";/** 汉字数据文件编码 */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 {URL url = new URL(HAN_DATA_FILE);InputStream in = url.openStream();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));}
}

获取文字或者段落的拼音算法相关推荐

  1. poi获取段落位置_java poi读取.doc和.docx文件时获取图片与段落的对应关系

    .doc文件 代码中的WordParagraph类是自己创建的实体类,用于记录文本信息和图片 file_word对象为前台上传的MultipartFile对象. // doc格式 List wordP ...

  2. 袁创:文本编辑器中文字断行及排版算法研究

    文本编辑器是一种非常复杂的图形软件,涉及到的很多开发技巧和软件结构都是传统的数据库程序开发中所从未应用的,因此掌握相关技术的人是非常的少的.在其中文字断行及排版算法是编辑器开发中的核心算法之一.如果没 ...

  3. 文本编辑器中文字断行及排版算法研究

    文本编辑器中文字断行及排版算法研究 袁永福 2013/4/15 文本编辑器是一种非常复杂的图形软件,涉及到的很多开发技巧和软件结构都是传统的数据库程序开发中所从未应用的,因此掌握相关技术的人是非常的少 ...

  4. C++获取链表的大小的实现算法(附完整源码)

    C++获取链表的大小的实现算法 C++获取链表的大小的实现算法完整源码(定义,实现,main函数测试) C++获取链表的大小的实现算法完整源码(定义,实现,main函数测试) #include < ...

  5. html获取文本框中的文字,JavaScript实现input输入框点击获取文字内容

    Js实现INPUT输入框,当鼠标点击文字时自动获取文字内容,并显示在文本框中,一个惯用的表单技巧,有时可省去一些用户输入的麻烦,可有效提升用户体验. input输入框获取js点击文字内容 .c{ wi ...

  6. html怎么设置文字段落,第3章 用HTML设置文字与段落.ppt

    第3章 用HTML设置文字与段落 第3章 用HTML设置文字.段落 GGAO CM WTU 学习目标 输入文字 设置文字的格式 设置段落的格式 水平线的标记 创建列表 使用marquee设置滚动效果 ...

  7. 前段基础 HTML 第三章文字与段落标记----假期学习第二天

    第3章 文字与段落标记 如何编排文字,控制文字显示方式,让文字看上去整齐美观 3.1 标题字 六级标题 <h1></h1>   <h2></h2>    ...

  8. Tensorflow+YOLO V4框架使用教程+YOLO V4获取识别框高度+基于相似三角形算法的物体距离测量

    Tensorflow+YOLO V4框架使用教程+YOLO V4获取识别框高度+基于相似三角形算法的物体距离测量 Tensorflow+YOLO V4框架使用教程+YOLO V4获取识别框高度+基于相 ...

  9. Web前端技术开发学习笔记(HTML标记语言篇)——第4章 文字与段落标记

    第4章 文字与段落标记 第4章 文字与段落标记 4.1文字标记 4.1.1 文字内容的输入 1.普通文字的输入 2.空格的输入 3.特殊文字的输入 4.注释语句 4.1.2 对文字字体的设置 4.1. ...

最新文章

  1. Python3中__init__.py文件介绍
  2. 联想一体计算机排行,2019最具性价比一体机推荐 电脑一体机十大最新排名
  3. 些许注意事项(初学)
  4. EOS账户系统(6)权限和Action映射
  5. 云炬Android开发笔记 2-1项目初始化
  6. Android开发之判断APP前后台的方法
  7. 在计算机科学中计算是指,在计算机中数值计算是指什么
  8. 工信部高级软件工程师证书有用吗_考bim工程师证书有用吗
  9. HNOI2019退役记
  10. 查看DELL服务器保修期
  11. docker容器必须要有前台进程
  12. php配置使用pdo,解析php5配置使用pdo
  13. 通过图片识别定位拍摄地点——微信小程序
  14. for循环去掉最后一个逗号
  15. 【MySQL】逻辑库与数据表相关操作
  16. 手机空间不足?教你2招省5G空间
  17. Arduino通过USB转TTL无BootLoader烧录程序的两种办法
  18. flexbuilder 开发工具
  19. sal2edge.py显著性mask生成边缘标签
  20. 非期望产出的sbm模型_KANO模型:产品人必懂的需求分析法

热门文章

  1. [USACO 2012 Feb B]Moo - 规律
  2. 《SQL基础知识第2版》PDF高清版,限时下载!
  3. 遗传算法之01背包问题 (C语言实现)
  4. 不等号属于不等式吗_不等式与不等关系
  5. 数据库一致性、完整性
  6. 为什么t检验要满足正态?
  7. 2020北京考研英语一80+经验
  8. 各开发者android平台的注册及上传方法汇总
  9. 读书百客:《郡斋雨中与诸文士燕集》赏析
  10. 神经网络中的线性和非线性---学习笔记