Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >java获取所输入汉字拼音的首字母

java获取所输入汉字拼音的首字母

原创
作者头像
IT工作者
发布于 2022-05-06 07:31:28
发布于 2022-05-06 07:31:28
2.5K00
代码可运行
举报
文章被收录于专栏:程序技术知识程序技术知识
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class StringUtil {  
//private static Log logger = LogFactory.getLog(StringUtil.class);  
// 国标码和区位码转换常量   
static final int GB_SP_DIFF = 160;  
//存放国标一级汉字不同读音的起始区位码   
static final int[] secPosValueList = {  
1601, 1637, 1833, 2078, 2274, 2302, 2433, 2594, 2787,  
3106, 3212, 3472, 3635, 3722, 3730, 3858, 4027, 4086,  
4390, 4558, 4684, 4925, 5249, 5600};  
//存放国标一级汉字不同读音的起始区位码对应读音   
static final char[] firstLetter = {  
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j',  
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',  
't', 'w', 'x', 'y', 'z'};  
//获取一个字符串的拼音码   
public static String getFirstLetter(String oriStr) {  
String str = oriStr.toLowerCase();  
StringBuffer buffer = new StringBuffer();  
char ch;  
char[] temp;  
for (int i = 0; i < str.length(); i++) { //依次处理str中每个字符   
ch = str.charAt(i);  
temp = new char[] {ch};  
byte[] uniCode = new String(temp).getBytes();  
if (uniCode[0] < 128 && uniCode[0] > 0) { // 非汉字   
buffer.append(temp);  
} else {  
buffer.append(convert(uniCode));  
}  
}  
return buffer.toString();  
}  
/** 获取一个汉字的拼音首字母。
* GB码两个字节分别减去160,转换成10进制码组合就可以得到区位码
* 例如汉字“你”的GB码是0xC4/0xE3,分别减去0xA0(160)就是0x24/0x43
* 0x24转成10进制就是36,0x43是67,那么它的区位码就是3667,在对照表中读音为‘n’
*/  
static char convert(byte[] bytes) {  
char result = '-';  
int secPosValue = 0;  
int i;  
for (i = 0; i < bytes.length; i++) {  
bytes -= GB_SP_DIFF;  
}  
secPosValue = bytes[0] * 100 + bytes[1];  
for (i = 0; i < 23; i++) {  
if (secPosValue >= secPosValueList && secPosValue < secPosValueList[i + 1]) {  
result = firstLetter;  //无法识别的字符显示为'-'
break;  
}  
}  
return result;  
}  
public static void main(String[] args) {  
System.out.println(getFirstLetter("I love u"));  
System.out.println(getFirstLetter("上海"));  
System.out.println(getFirstLetter("I love 上海电费网费"));  
System.out.println(getFirstLetter("地方"));

}  
}  

用main函数测试显示如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
i love u
sh
i love shdfwf
df

问题:但用android调用getFirstLetter()方法,虚拟机上显示的都为'-'(即无法识别),请问是为什么?谢谢!

原因:androd默认的字符集是Unicode编码而你的方法处理的是GBK,所以未识别。

解决:将  :byte[] uniCode = new String(temp).getBytes();  

            换成:byte[] uniCode = new String(temp).getBytes("GBK");

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
实现随机生成汉字的Java代码
GB2312 标准共收录 6763 个汉字,其中一级汉字 3755 个,二级汉字 3008 个;同时收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的 682 个字符。GB2312 的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆 99.75% 的使用频率。对于人名、古汉语等方面出现的罕用字,GB2312 不能处理,这导致了后来 GBK 及 GB18030 汉字字符集的出现。
用户1503405
2021/09/22
1.3K0
实现随机生成汉字的Java代码
一、背景知识 GB 2312-80 是中国国家标准简体中文字符集,全称《信息交换用汉字编码字符集·基本集》,由中国国家标准总局发布,1981年5月1日实施。GB2312 编码通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持 GB 2312。
用户8671053
2021/09/22
1.3K0
Android开发 - 汉字转拼音首字母
工作中经常会遇到的一些排序问题,比如 按汉字的拼音首字母排序,比如人名排序等,就要用到下面的方法了,思路:
张云飞Vir
2020/03/16
2.8K0
摩斯码编解码器
  今天是1024,程序员节那就干点儿程序员的事情。刚好,记得上高中时候,看过一部电影,无间道,里边黄秋生和梁朝伟用摩斯码通信,瞬间觉得好神秘,好帅气。最近闲来无事,出于对当初兴趣的尊敬,就顺手实现了一款简易的摩斯编解码器。
guokun
2020/09/03
6760
摩斯码编解码器
《Java从入门到失业》第三章:基础语法及基本程序结构(3.6):基本数据类型及字符集编码(字符编码和char型)
       咦?怎么好像有东西乱入了?不是讲基本数据类型么?哈哈,因为还剩下最后一个char型了,因为char型会牵涉到Unicode编码相关,因此我决定先科普一下字符集编码。
用户7801119
2020/09/27
7540
>> 技术应用:字符串首字母由大写改小写简单方法以及一些思考归纳
这的确是一个锻炼人的方案,可以给予程序员一个思考的空间。我Baidu了一下,这种代码编写方案在自定义工具类StringUtils的比较多,相对应的还有首字母改为大写。
艾特
2023/10/10
2080
>> 技术应用:字符串首字母由大写改小写简单方法以及一些思考归纳
JAVA 求中文首字母(大小写)
System.out.println("中文首字母:" + getPYIndexStr(str, false));
用户7886150
2020/12/10
1K0
你所不了解的字符编码
前言 在我的工作中,常常会遇到形形色色的字符编码,对于各种编码技术本人了解的也不是很多。 本篇是我了解编码系列的开篇,主要内容讲述字符编码的基本概念,然后介绍一下常见的字符编码,最后说明一下 Java
BUG弄潮儿
2021/06/25
1K0
你所不了解的字符编码
Java IO
Java 的 I/O 操作类在包 java.io 下,大概有将近 80 个类,但是这些类大概可以分成四组,分别是:
翎野君
2023/05/12
2920
Java IO
汉字转成拼音首字母
在做公交查询系统时,要求用户输入起点和终点。可是如果用户输错了,自己要判断,很麻烦,因为我的算法全是SQL。于是就想了一种折衷的方案:让用户从DropDownList里选。这样既方便了用户,也方便了自己。 可是,如果全部站点放入一个DropDownList的话,太多了(我这个济南的有一千多个啊),所以就先选择汉字的拼音首字母,再选择站点,实验证明很方便,速度很快! 这里用到了一个汉字转拼音的函数: static string Extract_HZ(string HZ)
逍遥剑客
2018/05/21
2.6K0
java获取汉字首字母以及全拼字母_excel中提取汉字首字母
使用Hutool工具类 官网链接 以下为Hutool支持的拼音库的pom坐标,你可以选择任意一个引入项目中,如果引入多个,Hutool会按照以上顺序选择第一个使用。
全栈程序员站长
2022/11/02
1.7K0
JAVA获取中文汉字字符串拼音首字母,英文字符不变的工具类
java在处理项目需求时,有时需要排序,尤其是中文名字按0-9,A-Z进行首字母排序,这时候就需要首先要得到中文字符串的首字母,然后按照字母顺序进行排序,不多说,直接上代码,看java如何获取中文字符串首字母:
一诺千金
2020/04/30
3.2K0
Java 读取汉字拼音
​pom.xml导入pinyin4j的依赖 <dependency> <groupId>com.belerweb</groupId> <artifactId>pinyin4j</artifactId> <version>2.5.1</version> </dependency> 汉字转拼音工具类 package org.fh.util; import net.sourceforge.pinyin4j.PinyinHe
FHAdmin
2021/06/29
2.8K0
Java基础(十六):String的常用API
方法二思路:截取前中后三个字符串,中是需要反转的,从新拼接,拼接中字符串时候,从后开始拼接
冬天vs不冷
2025/01/21
620
Java基础(十六):String的常用API
C#----汉字转拼音
上一篇博客中介绍的是动态加载EasyUI控件显示到前台,里面包括按钮控件,而且每一个设备有可能有不同的命令和参数,不过总共可以显示的有八种不同的按钮,公用的,那如何实现不同的参数按钮点击的时候能够去加载相同的JS,而不用每次都去获取一个新的ID,于是就想到了一个办法,根据从数据库中获取的命令的数据,将汉字转化成拼音,这样就可以实现上面的结果。
令仔很忙
2018/09/14
4.5K0
汉字转拼音工具
maven引入:<dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</artifactId><version>2.5.0</version></dependency>
JQ实验室
2022/02/09
2.4K0
Java进阶-IO(2)
话接上回,继续java IO部分的学习。上一次说完了字节流的读写数据,这次介绍一下字符流的读写数据。
reload
2024/03/03
1840
从Properties乱码来学习编码
最近使用到java中的Properties来获取一些变量信息,但如果变量值中有中文,那么最终录入到内存中的字符将会变乱码,那么是什么原因使得中文变成乱码呢?
zhangheng
2020/09/07
8990
从Properties乱码来学习编码
字符编码技术专题(五):前端必读的计算机字符编码知识入门
以上这些问题都涉及到计算机中*础的知识点——字符集及字符编码的概念,本篇将从前端开发人员的视解,让你彻底搞清并理解这些问题的本质。
JackJiang
2023/09/28
3810
字符编码技术专题(五):前端必读的计算机字符编码知识入门
Java成神路 —— 字节缓冲流 && 字符流
0. 字符流与字节流 1.字节缓冲流 1.1 字节缓冲流构造方法 1. 字节缓冲流介绍 lBufferOutputStream:该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用 lBufferedInputStream:创建BufferedInputStream将创建一个内部缓冲区数组。 当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节 2. 构造方法 方法名 说明 BufferedOutputS
繁依Fanyi
2023/05/07
3390
Java成神路 —— 字节缓冲流 && 字符流
相关推荐
实现随机生成汉字的Java代码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验