原理: GB2312编码中的中文是按照拼音排序的

注意: 一些生僻的字无法获得正确的首字母,原因是这些字都是后加入的。

  1. import java.io.UnsupportedEncodingException;
  2.  
  3. /**
  4. * 取得给定汉字串的首字母串,即声母串
  5. *
  6. * 注:只支持GB2312字符集中的汉字
  7. */
  8. class ChineseInital {
  9. private final static int[] areaCode = { 1601, 1637, 1833, 2078, 2274,
  10. 2302, 2433, 2594, 2787, 3106, 3212, 3472, 3635, 3722, 3730, 3858,
  11. 4027, 4086, 4390, 4558, 4684, 4925, 5249, 5590 };
  12. private final static String[] letters = { "a", "b", "c", "d", "e",
  13. "f", "g", "h", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
  14. "t", "w", "x", "y", "z" };
  15.  
  16. /**
  17. * 取得给定汉字串的首字母串
  18. * @param str 给定汉字串
  19. * @return 所有字符的首字母
  20. */
  21. public static String getAllFirstLetter(String str) {
  22. if (str == null || str.trim().length() == 0) {
  23. return "";
  24. }
  25.  
  26. String _str = "";
  27. for (int i = 0; i < str.length(); i++) {
  28. _str = _str + this.getFirstLetter(str.substring(i, i + 1));
  29. }
  30.  
  31. return _str;
  32. }
  33.  
  34. /**
  35. * 取得给定汉字的首字母,即声母
  36. * @param chinese 给定的汉字
  37. * @return 给定汉字的声母
  38. */
  39. public static String getFirstLetter(String chinese) {
  40. if (chinese == null || chinese.trim().length() == 0) {
  41. return "";
  42. }
  43. chinese = this.conversionStr(chinese, "GB2312", "ISO8859-1");
  44.  
  45. if (chinese.length() > 1) // 判断是不是汉字
  46. {
  47. int li_SectorCode = (int) chinese.charAt(0); // 汉字区码
  48. int li_PositionCode = (int) chinese.charAt(1); // 汉字位码
  49. li_SectorCode = li_SectorCode - 160;
  50. li_PositionCode = li_PositionCode - 160;
  51. int li_SecPosCode = li_SectorCode * 100 + li_PositionCode; // 汉字区位码
  52. if (li_SecPosCode > 1600 && li_SecPosCode < 5590) {
  53. for (int i = 0; i < 23; i++) {
  54. if (li_SecPosCode >= areaCode[i]
  55. && li_SecPosCode < areaCode[i + 1]) {
  56. chinese = letters[i];
  57. break;
  58. }
  59. }
  60. } else // 非汉字字符,如图形符号或ASCII码
  61. {
  62. chinese = this.conversionStr(chinese, "ISO8859-1", "GB2312");
  63. chinese = chinese.substring(0, 1);
  64. }
  65. }
  66.  
  67. return chinese;
  68. }
  69.  
  70. /**
  71. * 字符串编码转换
  72. * @param str 要转换编码的字符串
  73. * @param charsetName 原来的编码
  74. * @param toCharsetName 转换后的编码
  75. * @return 经过编码转换后的字符串
  76. */
  77. private static String conversionStr(String str, String charsetName,String toCharsetName) {
  78. try {
  79. str = new String(str.getBytes(charsetName), toCharsetName);
  80. } catch (UnsupportedEncodingException ex) {
  81. System.out.println("字符串编码转换异常:" + ex.getMessage());
  82. }
  83. return str;
  84. }
  85.  
  86. }

调用:

  1. String s = ChineseInital.getAllFirstLetter("中华人民共和国");
  2. System.out.println(s); // => "zhrmghg"

(整理于网络)

java 获取中文字符的首字母的更多相关文章

  1. php 获取中文字符拼音首字母

    //php获取中文字符拼音首字母 function getFirstCharter($str){ if(empty($str)){return '';} $fchar=ord($str{}); }); ...

  2. php获取中文字符拼音首字母

    //php获取中文字符拼音首字母 function getFirstCharter($str){ if(empty($str)){ return ''; } $fchar = ord($str{0}) ...

  3. C#&Sql获取中文字符拼音首字母的方法

    C#获取字符拼音首字母,可以存储在数据库中以备将来按字母搜索的需求. public static string GetAc(string s) { try { string temp = Servic ...

  4. js 获取中文的拼音首字母

    es6 + 模块化封装 "use strict"; module.exports = { //参数,中文字符串 //返回值:拼音首字母串数组 makePy (str) { if ( ...

  5. C# 获取汉字的拼音首字母和全拼(含源码)

    C# 获取汉字的拼音首字母 一种是把所有中文字符集合起来组成一个对照表:另一种是依照汉字在Unicode编码表中的排序来确定拼音的首字母.碰到多音字时就以常用的为准(第一种方法中可以自行更改,方法为手 ...

  6. sqlserver 获取汉字拼音的首字母(大写)函数

    1:创建函数: USE [test] GO /****** 对象: UserDefinedFunction [dbo].[GetFirstChar] 脚本日期: 02/22/2019 16:39:06 ...

  7. JAVA的中文字符乱码问题

    来源:http://luzefengoo.blog.163.com/blog/static/1403593882012754428536/ JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用 ...

  8. C#获取汉字拼音和首字母

    C#获取汉字拼音和首字母 引入NPinyin using NPinyin; 调用 /// <summary> /// 中文首字母大写 /// </summary> /// &l ...

  9. SqlServer 笔记二 获取汉字的拼音首字母

    一.该函数传入字符串,返回数据为:如果为汉字字符,返回该字符的首字母,如果为非汉字字符,则返回本身. 二.用到的知识点:汉字对应的UNICODE值,汉字的排序规则. 三.数据库函数: )) ) AS ...

随机推荐

  1. Hexo博客建设

    上次我教大家利用wordpress程序搭建个人网站,这次换个Hexo来搭建咱们的个人博客,那咱们开始吧!先提供官网给大家英文版的请点击这里,中文版的请点击这里,好了然后是工具要准备下,貌似就只要安装g ...

  2. 60阶单群同构于A5的证明

    设$G$是$60$阶的单群,我们来证明他同构于$A_5$,一个比较直观地思路是考虑群表示$\phi:G\to S(\Sigma)$,由同态基本定理得到$$G/{\rm Ker}\phi \simeq ...

  3. postgres索引创建、 存储过程的创建以及在c#中的调用

    postgres创建索引参考 http://www.cnblogs.com/stephen-liu74/archive/2012/05/09/2298182.html CREATE TABLE tes ...

  4. 【转】linux sort 命令详解

    sort是在Linux里非常常用的一个命令,管排序的,集中精力,五分钟搞定sort,现在开始! 1 sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按AS ...

  5. 浅谈Yii-admin的权限控制

    说到CMS,最需要有的东西就是权限控制,特别是一些复杂的场景,多用户,多角色,多部门,子父级查看等等.最近在开发一个线下销售的东东,这个系统分为管理员端,省代端,客户端,门店端,销售端, 部门端,部门 ...

  6. 网站跨站点脚本,Sql注入等攻击的处理

    从360安全论坛里找到的一段代码,经过整理封装,直接在站点Global.asax文件或写一个HttpModule来拦截恶意请求即可: http://bbs.webscan.360.cn/forum.p ...

  7. 清理SYSAUX表空间

    1.查看SYSAUX表空间中数据分布情况 col SEGMENT_NAME for a30 set lines 999 select * from (select segment_name,PARTI ...

  8. Web Applicationservlet,cookie,session

    Web Application简介: Web Application NameWEB-INFweb.xml 该web application的配置文件lib 该web application用到的依赖 ...

  9. Hibernate注解方式配置-继承关系

    在JPA中,实体继承关系的映射策略共有三种:单表继承策略(table per class).Joined策略(table per subclass)和Table_PER_Class策略. 1.单表继承 ...

  10. 禁用ViewPager边界滑动效果(转)

    反射设置方法 private EdgeEffectCompat leftEdge; private EdgeEffectCompat rightEdge; public void DisableLRS ...