算法笔记_232:提取拼音首字母(Java)

目录

1 问题描述

2 解决方案

 


1 问题描述

在很多软件中,输入拼音的首写字母就可以快速定位到某个词条。比如,在铁路售票软件中,输入: “bj”就可以定位到“北京”。怎样在自己的软件中实现这个功能呢?问题的关键在于:对每个汉字必须能计算出它的拼音首字母。

GB2312汉字编码方式中,一级汉字的3755个是按照拼音顺序排列的。我们可以利用这个特征,对常用汉字求拼音首字母。

GB2312编码方案对每个汉字采用两个字节表示。第一个字节为区号,第二个字节为区中的偏移号。为了能与已有的ASCII编码兼容(中西文混排),区号和偏移编号都从0xA1开始。

我们只要找到拼音a,b,c,...x,y,z 每个字母所对应的GB2312编码的第一个汉字,就可以定位所有一级汉字的拼音首字母了(不考虑多音字的情况)。下面这个表给出了前述信息。请你利用该表编写程序,求出常用汉字的拼音首字母。

a 啊 B0A1
b 芭 B0C5
c 擦 B2C1
d 搭 B4EE
e 蛾 B6EA
f 发 B7A2
g 噶 B8C1
h 哈 B9FE
j 击 BBF7
k 喀 BFA6
l 垃 C0AC
m 妈 C2E8
n 拿 C4C3
o 哦 C5B6
p 啪 C5BE
q 期 C6DA
r 然 C8BB
s 撒 C8F6
t 塌 CBFA
w 挖 CDDA
x 昔 CEF4
y 压 D1B9
z 匝 D4D1

【输入、输出格式要求】

用户先输入一个整数n (n<100),表示接下来将有n行文本。接着输入n行中文串(每个串不超过50个汉字)。

程序则输出n行,每行内容为用户输入的对应行的汉字的拼音首字母。

字母间不留空格,全部使用大写字母。

例如:
用户输入:
3
大家爱科学
北京天安门广场
软件大赛

则程序输出:
DJAKX
BJTAMGC
RJDS


2 解决方案

 1 import java.io.UnsupportedEncodingException;
 2 import java.util.Scanner;
 3
 4 public class Main {
 5     public static String[] arrayA = {"啊","芭","擦 ","搭","蛾 ","发 ","噶 ","哈 ",
 6         "击","喀","垃 ","妈 ","拿","哦 ","啪 ","期 ","然 ", "撒 ","塌","挖","昔",
 7         "压","匝"};
 8     public static int[] valueA = new int[23];
 9     public static char[] resultA = {‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘G‘,‘H‘,‘J‘,‘K‘,
10         ‘L‘,‘M‘,‘N‘,‘O‘,‘P‘,‘Q‘,‘R‘,‘S‘,‘T‘,‘W‘,‘X‘,‘Y‘,‘Z‘};
11
12     public int getNum(String A) {
13         byte[] a = null;
14         try {
15             a = A.getBytes("GB2312");
16         } catch (UnsupportedEncodingException e) {
17             e.printStackTrace();
18         }
19         int b = ((a[0]<<8)&0xff00) + (a[1]&0xff);
20         return b;
21     }
22
23     public String getResult(String A) {
24         int num = getNum(A);
25         int i = 0;
26         for(;i < 23;i++)
27             if(valueA[i] > num)
28                 break;
29         String r = "" + resultA[i - 1];
30         return r;
31     }
32
33     public static void main(String[] args) {
34         Main test = new Main();
35         for(int i = 0;i < 23;i++)
36             valueA[i] = test.getNum(arrayA[i]);
37         Scanner in = new Scanner(System.in);
38         int n = in.nextInt();
39         String[] result = new String[n];
40         for(int i = 0;i < n;i++) {
41             String A = in.next();
42             StringBuffer s = new StringBuffer("");
43             for(int j = 0;j < A.length();j++) {
44                 String temp = "" + A.charAt(j);
45                 s.append(test.getResult(temp));
46             }
47             result[i] = s.toString();
48         }
49         for(int i = 0;i < n;i++)
50             System.out.println(result[i]);
51     }
52 }

运行结果:

4
建设社会主义新农村
欧洲
给我一个支点我可以撬动地球
怎
JSSHZYXNC
OZ
GWYGZDWKYQDDQ
Z
时间: 2024-10-03 22:55:56

算法笔记_232:提取拼音首字母(Java)的相关文章

SQL Server 字段提取拼音首字母

目前工作中遇到一个情况,需要将SQL Server中的一个字段提取拼音的首字母,字段由汉字.英文.数字以及“-”构成,百度了一堆,找到如下方法,记录一下,以备后用! 首先建立一个函数 --生成拼音首码 CREATE function fn_GetPy(@str nvarchar(4000)) returns nvarchar(4000) --WITH ENCRYPTION as begin declare @intLen int declare @strRet nvarchar(4000) de

java获取汉字拼音首字母 --转载

在项目中要更能根据某些查询条件(比如姓名)的首字母作为条件进行查询,比如查一个叫"李晓明"的人,可以输入'lxm'.写了一个工具类如下: import java.io.UnsupportedEncodingException; /** * 取得给定汉字串的首字母串,即声母串 * Title: ChineseCharToEn * @date 2004-02-19 注:只支持GB2312字符集中的汉字 */ public final class ChineseCharToEn { priv

【JAVA】获取汉字拼音首字母

最近在做通讯录的时候,需要把姓转换为拼音字母 1-9 a-z A-Z 转换为#:借张微信的图大家感受下 网上的代码很多,不外乎两种 1:pinyin4java包太大 2:大部分不支持生僻字,比如“栾.鑫” 认不出 本方案解决了这个问题,就很简单一个helper类,注意,只是拼音首字母哦!且编码格式为GBK! 代码很简单,就是在正常GBK检索不到的生僻字上,再加入一个字典,如果GBK检索不到,则在字典里找. package zhexian.app.smartcall.Utils; import j

excel提取单元格汉字拼音首字母

Option ExplicitFunction PY(TT As String) As Variant '自定义函数,目的:把一组汉字变为一组汉字拼音的第一个字母.Dim i%, temp$    PY = ""    For i = 1 To Len(TT)         temp = Asc(Mid$(TT, i, 1))         If temp > 255 Or temp < 0 Then   '是汉字吗?             PY = PY &

C# 使用微软的Visual Studio International Pack 类库提取汉字拼音首字母

代码参考该文http://www.cnblogs.com/yazdao/archive/2011/06/04/2072488.html VS2015版本 1.使用Nuget 安装 "SimplifiedChinesePinYinConversion" 2.代码: using Microsoft.International.Converters.PinYinConverter; using System; using System.Collections.Generic; using S

城市列表-根据拼音首字母排序

今天我们就简单的实现一下城市的排序 读取我们城市的信息并通过listview展示 首先看一下我们的布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layo

JS获取中文拼音首字母,并通过拼音首字母高速查找页面内的中文内容

实现效果: 图一: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVzdGNzX2Ru/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" /> 图二: 此例中输入的中文字符串"万万保重",有三个字是多音字.所以alert对话框中显示的是多种读音的组合. 怎样实现? 怎样实现通过拼音首字母高速查找页面内的中文内容呢? 过程原

4月02日 提取汉字首字母,并大写的类

  public class GetStringSpell    {        /// <summary>          /// 提取汉字首字母          /// </summary>          /// <param name="strText">需要转换的字</param>          /// <returns>转换结果</returns>          public strin

汉字转拼音首字母

输入汉字,提取其首字母: /// <summary> /// 汉字转拼音缩写 /// Code By /// 2004-11-30 /// </summary> /// <param name="str">要转换的汉字字符串</param> /// <returns>拼音缩写</returns> public string GetPYString(string str) { string tempStr = &qu