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

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

import java.io.UnsupportedEncodingException;

/**

* 取得给定汉字串的首字母串,即声母串

*

* 注:只支持GB2312字符集中的汉字

*/

class ChineseInital {

private final static int[] areaCode = { 1601, 1637, 1833, 2078, 2274,

2302, 2433, 2594, 2787, 3106, 3212, 3472, 3635, 3722, 3730, 3858,

4027, 4086, 4390, 4558, 4684, 4925, 5249, 5590 };

private final static String[] letters = { "a", "b", "c", "d", "e",

"f", "g", "h", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",

"t", "w", "x", "y", "z" };

/**

* 取得给定汉字串的首字母串

* @param str 给定汉字串

* @return 所有字符的首字母

*/

public static String getAllFirstLetter(String str) {

if (str == null || str.trim().length() == 0) {

return "";

}

String _str = "";

for (int i = 0; i < str.length(); i++) {

_str = _str + this.getFirstLetter(str.substring(i, i + 1));

}

return _str;

}

/**

* 取得给定汉字的首字母,即声母

* @param chinese 给定的汉字

* @return 给定汉字的声母

*/

public static String getFirstLetter(String chinese) {

if (chinese == null || chinese.trim().length() == 0) {

return "";

}

chinese = this.conversionStr(chinese, "GB2312", "ISO8859-1");

if (chinese.length() > 1) // 判断是不是汉字

{

int li_SectorCode = (int) chinese.charAt(0); // 汉字区码

int li_PositionCode = (int) chinese.charAt(1); // 汉字位码

li_SectorCode = li_SectorCode - 160;

li_PositionCode = li_PositionCode - 160;

int li_SecPosCode = li_SectorCode * 100 + li_PositionCode; // 汉字区位码

if (li_SecPosCode > 1600 && li_SecPosCode < 5590) {

for (int i = 0; i < 23; i++) {

if (li_SecPosCode >= areaCode[i]

&& li_SecPosCode < areaCode[i + 1]) {

chinese = letters[i];

break;

}

}

} else // 非汉字字符,如图形符号或ASCII码

{

chinese = this.conversionStr(chinese, "ISO8859-1", "GB2312");

chinese = chinese.substring(0, 1);

}

}

return chinese;

}

/**

* 字符串编码转换

* @param str 要转换编码的字符串

* @param charsetName 原来的编码

* @param toCharsetName 转换后的编码

* @return 经过编码转换后的字符串

*/

private static String conversionStr(String str, String charsetName,String toCharsetName) {

try {

str = new String(str.getBytes(charsetName), toCharsetName);

} catch (UnsupportedEncodingException ex) {

System.out.println("字符串编码转换异常:" + ex.getMessage());

}

return str;

}

}

调用:

String s = ChineseInital.getAllFirstLetter("中华人民共和国");

System.out.println(s); // => "zhrmghg"

(整理于网络)

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

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

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

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

C&num;&amp&semi;Sql获取中文字符拼音首字母的方法

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

js 获取中文的拼音首字母

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

C&num; 获取汉字的拼音首字母和全拼(含源码)

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

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

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

JAVA的中文字符乱码问题

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

C&num;获取汉字拼音和首字母

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

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

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

随机推荐

&lt&semi;十五&gt&semi;JDBC&lowbar;使用 DBUtils 进行更新、查询操作

详解待续... DBUtilsTest.java import java.sql.Connection;import java.sql.Date;import java.sql.ResultSet;i ...

Crusher Django 学习笔记4 使用Model

http://crusher-milling.blogspot/2013/09/crusher-django-tutorial4-using-basic.html 顺便学习一下FQ Crush ...

linux 内核 zImage 生成过程分析

1. 依据arch/arm/kernel/vmlinux.lds 生成linux内核源码根目录下的vmlinux,这个vmlinux属于未压缩,带调试信息.符号表的最初的内核,大小约23MB: arm ...

CSAPP-程序优化

代码移动: 如果一个表达式总是得到同样的结果,最好把它移动到循环外面,这样只需要计算一次.编译器有时候可以自动完成,比如说使用 -O1 优化.一个例子: void set_row(double *a, ...

使用 WRK 压力测试工具对 ASP&period;NET Core 的接口进行压力测试

0. 简要介绍 WRK 是一款轻量且易用的 HTTP 压力测试工具,通过该工具我们可以方便地对我们所开发的 WebAPI 项目进行压力测试,并且针对测试的情况返回结果. PS:Wrk 并不能针对测试的 ...

Linux基础命令---修改用户信息usermod

usermod 修改用户的信息,包括用户名.密码.家目录.uid等. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法 use ...

numRecordsIn 在哪里实现?

/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreem ...

JS 根据子网掩码,网关计算出所有的IP范围

// 验证IP的正则 var ip_reg = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0- ...

更多推荐

java取字符串首字母_java 获取中文字符的首字母