1.需要下载Pinyin4j的jar包。下载地址为https://sourceforge.net/projects/pinyin4j/files/
下载后需要放到安卓项目目录下的libs文件夹。如下图片所示

然后还需要依赖这个jar包。不会导包的Android Studio导入jar包或aar包看这个链接。https://blog.csdn.net/qq_36570506/article/details/128019219
基本用法:
通常情况下,只需要用到其中的PinyinHelper类中的静态方法toHanyuPinyinStringArray就可以了,比如:
String[] pinyinArray =PinyinHelper.toHanyuPinyinStringArray(‘单’);
for(int i = 0; i < pinyinArray.length; ++i)
{
System.out.println(pinyinArray[i]);
}
就会输出:
dan1
chan2
shan4
这三种发音,后面的数字代表第几声。可以看到静态方法toHanyuPinyinStringArray返回的数据类型是一个String数组,它用来接收一个汉字的多个发音,如果toHanyuPinyinStringArray中的参数不是汉字,那么它会返回null。
2.上面的第一步,只是为了给城市名称转换成拼音输出,好为了城市名称按首字母排序,有了第一步的拼音,只需要将拼音的字符串截取第一位字母即可排序。排序见MainActivity类对象里面

import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.example.myapplication001.R.id;
import com.bumptech.glide.Glide;import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;public class MainActivity extends AppCompatActivity  implements LetterSideBar.OnTouchLetterListener {private ImageView view;private TextView tv;private ListView listView;private LetterSideBar letterSideBar;private TextView textView;/*** 没有排序,旧的数据*/private List<CityBean> mCities = new ArrayList();/*** 排序后的,新的数据*/private List<CityBean> all_mCities = new ArrayList();private CityAdapter mAdapter;//----------------------------------------------------------------------------------------------//26个字母private List<CityBean> list_a = new ArrayList();private List<CityBean> list_b = new ArrayList();private List<CityBean> list_c = new ArrayList();private List<CityBean> list_d = new ArrayList();private List<CityBean> list_e = new ArrayList();private List<CityBean> list_f = new ArrayList();private List<CityBean> list_g = new ArrayList();private List<CityBean> list_h = new ArrayList();private List<CityBean> list_i = new ArrayList();private List<CityBean> list_j = new ArrayList();private List<CityBean> list_k = new ArrayList();private List<CityBean> list_l = new ArrayList();private List<CityBean> list_m = new ArrayList();private List<CityBean> list_n = new ArrayList();private List<CityBean> list_o = new ArrayList();private List<CityBean> list_p = new ArrayList();private List<CityBean> list_q = new ArrayList();private List<CityBean> list_r = new ArrayList();private List<CityBean> list_s = new ArrayList();private List<CityBean> list_t = new ArrayList();private List<CityBean> list_u = new ArrayList();private List<CityBean> list_v = new ArrayList();private List<CityBean> list_w = new ArrayList();private List<CityBean> list_x = new ArrayList();private List<CityBean> list_y = new ArrayList();private List<CityBean> list_z = new ArrayList();//----------------------------------------------------------------------------------------------@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = (TextView) findViewById(R.id.name);listView = (ListView) findViewById(R.id.id_lv_citysa);letterSideBar = (LetterSideBar) findViewById(R.id.id_ls_sidebara);textView = (TextView) findViewById(R.id.id_tv_maska);//   CityListActivity.startCityActivityForResult(MainActivity.this);//        for (int i=0;i<6;i++){//            CityBean cityBean13=new CityBean();
//            cityBean13.setId(0);
//            cityBean13.setName("v他素");
//            //   cityBean13.setPinyin("haikou");
//            cityBean13.setPinyin("v");
//            this.mCities.add(cityBean13);
//        }for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("青岛");//  cityBean0.setPinyin("qingdao");//      cityBean0.setPinyin("q");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean=new CityBean();cityBean.setId(i);cityBean.setName("佛山");//   cityBean.setPinyin("foshan");//   cityBean.setPinyin("f");this.mCities.add(cityBean);}//        for (int i=0;i<6;i++){//            CityBean cityBean0=new CityBean();
//            cityBean0.setId(0);
//            cityBean0.setName("U型管");
//        //    cityBean0.setPinyin("uxingguan");
//            cityBean0.setPinyin("u");
//            this.mCities.add(cityBean0);
//        }//        for (int i=0;i<6;i++){//            CityBean cityBean0=new CityBean();
//            cityBean0.setId(0);
//            cityBean0.setName("id");
//          //  cityBean0.setPinyin("id");
//            cityBean0.setPinyin("i");
//            this.mCities.add(cityBean0);
//        }for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("北京");//  cityBean0.setPinyin("beijing");//    cityBean0.setPinyin("b");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("日本");//    cityBean0.setPinyin("riben");//    cityBean0.setPinyin("r");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("草本植物");//  cityBean0.setPinyin("caobenzhiwu");//     cityBean0.setPinyin("c");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("台湾");//   cityBean0.setPinyin("taiwan");//     cityBean0.setPinyin("t");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("峨眉山");//     cityBean0.setPinyin("emeishan");//   cityBean0.setPinyin("e");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("江门");//  cityBean0.setPinyin("jiangmen");//    cityBean0.setPinyin("j");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("昆明");//   cityBean0.setPinyin("kunming");//   cityBean0.setPinyin("k");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("兰州");//  cityBean0.setPinyin("lanzhou");//   cityBean0.setPinyin("l");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("茂名");//   cityBean0.setPinyin("maoming");//    cityBean0.setPinyin("m");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("南京");//   cityBean0.setPinyin("nanjing");//    cityBean0.setPinyin("n");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("欧洲");//   cityBean0.setPinyin("ouzhou");//   cityBean0.setPinyin("o");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean0=new CityBean();cityBean0.setId(0);cityBean0.setName("判断");//   cityBean0.setPinyin("panyu");//   cityBean0.setPinyin("p");this.mCities.add(cityBean0);}for (int i=0;i<6;i++){CityBean cityBean1=new CityBean();cityBean1.setId(0);cityBean1.setName("暗凯");//   cityBean1.setPinyin("ankai");//    cityBean1.setPinyin("a");this.mCities.add(cityBean1);}for (int i=0;i<6;i++){CityBean cityBean12=new CityBean();cityBean12.setId(0);cityBean12.setName("德州");//    cityBean12.setPinyin("dezhou");//  cityBean12.setPinyin("d");this.mCities.add(cityBean12);}for (int i=0;i<6;i++){CityBean cityBean13=new CityBean();cityBean13.setId(0);cityBean13.setName("海口");//   cityBean13.setPinyin("haikou");//    cityBean13.setPinyin("h");this.mCities.add(cityBean13);}for (int i=0;i<6;i++){CityBean cityBean14=new CityBean();cityBean14.setId(0);cityBean14.setName("烟台");//    cityBean14.setPinyin("yantai");//    cityBean14.setPinyin("y");this.mCities.add(cityBean14);}for (int i=0;i<6;i++){CityBean cityBean15=new CityBean();cityBean15.setId(0);cityBean15.setName("张家口");//   cityBean15.setPinyin("zhangjiakou");//  cityBean15.setPinyin("z");this.mCities.add(cityBean15);}for (int i=0;i<6;i++){CityBean cityBean16=new CityBean();cityBean16.setId(0);cityBean16.setName("瞎子");//   cityBean16.setPinyin("xiamen");//   cityBean16.setPinyin("x");this.mCities.add(cityBean16);}for (int i=0;i<6;i++){CityBean cityBean17=new CityBean();cityBean17.setId(0);cityBean17.setName("文山");//   cityBean17.setPinyin("wenshan");//    cityBean17.setPinyin("w");this.mCities.add(cityBean17);}for (int i=0;i<6;i++){CityBean cityBean18=new CityBean();cityBean18.setId(0);cityBean18.setName("三亚");//    cityBean18.setPinyin("sanya");//   cityBean18.setPinyin("s");this.mCities.add(cityBean18);}for (int i=0;i<6;i++){CityBean cityBean=new CityBean();cityBean.setId(i);cityBean.setName("广州");//  cityBean.setPinyin("guangzhou");//   cityBean.setPinyin("g");this.mCities.add(cityBean);}//------------------------------------------------------------------------------------------//在这里给城市名称设置拼音Log.v("拼音输出2",  "打印 all_mCities.size()="+mCities.size());for(int i = 0; i < mCities.size(); ++i){     /*** 得到多个拼音数组,多音字*/String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(mCities.get(i).getName().charAt(0));//只要城市名称的第一个字//   Log.v("拼音输出2",  "打印数组大小 "+pinyinArray.length);Log.v("拼音输出2",  "只要打印拼音1 "+pinyinArray[0].charAt(0));//这里只要多音字数组中的第一个,并且只要拼音字符串里的第一个字母//给城市名称列表设置拼音,只要拼音字符串里的第一个字母mCities.get(i).setPinyin(pinyinArray[0].charAt(0)+"");}//------------------------------------------------------------------------------------------//----------------------------------------------------------------------------------------//在这里排序     总共有这么多数据for(int i=0;i<mCities.size();i++){switch (mCities.get(i).getPinyin()){case "a" :list_a.add(mCities.get(i));break;case "b" :list_b.add(mCities.get(i));break;case "c" :list_c.add(mCities.get(i));break;case "d" :list_d.add(mCities.get(i));break;case "e" :list_e.add(mCities.get(i));break;case "f" :list_f.add(mCities.get(i));break;case "g" :list_g.add(mCities.get(i));break;case "h" :list_h.add(mCities.get(i));break;case "i" :list_i.add(mCities.get(i));break;case "j" :list_j.add(mCities.get(i));break;case "k" :list_k.add(mCities.get(i));break;case "l" :list_l.add(mCities.get(i));break;case "m" :list_m.add(mCities.get(i));break;case "n" :list_n.add(mCities.get(i));break;case "o" :list_o.add(mCities.get(i));break;case "p" :list_p.add(mCities.get(i));break;case "q" :list_q.add(mCities.get(i));break;case "r" :list_r.add(mCities.get(i));break;case "s" :list_s.add(mCities.get(i));break;case "t" :list_t.add(mCities.get(i));break;case "u" :list_u.add(mCities.get(i));break;case "v" :list_v.add(mCities.get(i));break;case "w" :list_w.add(mCities.get(i));break;case "x" :list_x.add(mCities.get(i));break;case "y" :list_y.add(mCities.get(i));break;case "z" :list_z.add(mCities.get(i));break;}}all_mCities.addAll(list_a);all_mCities.addAll(list_b);all_mCities.addAll(list_c);all_mCities.addAll(list_d);all_mCities.addAll(list_e);all_mCities.addAll(list_f);all_mCities.addAll(list_g);all_mCities.addAll(list_h);all_mCities.addAll(list_i);all_mCities.addAll(list_j);all_mCities.addAll(list_k);all_mCities.addAll(list_l);all_mCities.addAll(list_m);all_mCities.addAll(list_n);all_mCities.addAll(list_o);all_mCities.addAll(list_p);all_mCities.addAll(list_q);all_mCities.addAll(list_r);all_mCities.addAll(list_s);all_mCities.addAll(list_t);all_mCities.addAll(list_u);all_mCities.addAll(list_v);all_mCities.addAll(list_w);all_mCities.addAll(list_x);all_mCities.addAll(list_y);all_mCities.addAll(list_z);//---------------------------------------------------------------------------------------this.mAdapter = new CityAdapter(this, this.all_mCities);this.listView.setAdapter(this.mAdapter);this.letterSideBar.setOverLayTextView(this.textView);this.letterSideBar.setOnTouchLetterListener(this);//城市列表点击事件监听this.listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {public void onItemClick(AdapterView<?> parent, View view, int position, long id) {CityBean bean = (CityBean)mAdapter.getItem(position);tv.setText(bean.getName());}});}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if(requestCode == 101&& resultCode ==102){String city = data.getStringExtra("city");tv.setText(city);}}/*** 这个方法是用来与listview城市列表通信的,侧边栏的字母与城市列表字母一一对应* @param letter*/public void onLetterSelected(String letter) {int position = this.mAdapter.getPosition(letter);if (position != -1) {Log.v("LOG我在这里啊",  "走到这里  position != -1 "+position);this.listView.setSelection(position);}}
}

Pinyin4j的基本用法,以及给城市名称选择排序,侧边栏字母排序,内有Pinyin4j的下载链接,这是对我发表的上一篇文章进行修改以及更新bug,上一篇文章排序有点bug,现在将bug修改好了相关推荐

  1. 【实践】汽车之家推荐系统排序算法迭代之路.pdf(附下载链接)

    今天给大家分享汽车之家李晨旭先生所做的分享<汽车之家推荐系统排序算法迭代之路.pdf>. 本PPT已收录到小程序省时查报告中,大家可以到省时查报告小程序中查看并下载文档全文. 更多细节和相 ...

  2. 用批处理整理百度MP3上歌曲排行榜MP3及LRC文件的批量下载链接地址(含图文教程)

    http://bbs.wuyou.com/viewthread.php?tid=192322 本文结构如下: 一.缘起:问题的提出 二.试探:徒劳而返 三.峰回路转:芝麻!开门! 四.万事俱备:xml ...

  3. Java黑皮书课后题第4章:*4.24(对三个城市排序)编写一个程序,提示用户输入三个城市名称,然后以升序进行显示

    *4.24(对三个城市排序)编写一个程序,提示用户输入三个城市名称,然后以升序进行显示 题目 题目概述 运行示例 破题 代码 题目 题目概述 *4.24(对三个城市排序)编写一个程序,提示用户输入三个 ...

  4. 城市名称按首字母分组排序,并实现多音字处理

    一.需求 将城市列表(中文)按照首字母分组排序,以26个字母的顺序进行分组. 传统的解决方式使用如下pinyin4j来解决: <dependency><groupId>com. ...

  5. Python爬虫学习第三章-4.3-使用xpath解析爬取全国城市名称

    Python爬虫学习第三章-4.3-使用xpath解析爬取全国城市名称   这一节主要是使用xpath解析爬取全国城市名称 这里使用的网址是:空气质量历史数据查询   这一个案例体现的点主要是xpat ...

  6. 从编程角度来看此次乐言利用bug上分事件

    这些天玩英雄联盟的人都知道峡谷之巅出了一件大事,LOL自远古大神发呆之后还没出现过如此严重.影响如此恶劣的bug.此次bug的出现由职业选手乐言首先发现, 但他并没有选择像发呆哥那样向官方提交bug, ...

  7. 微信翻译出Bug上热搜,程序员又背锅?

    作者| 伍杏玲 来源 | 程序人生(ID:coder_life) 60s测试:你是否适合转型人工智能? https://edu.csdn.net/topic/ai30?utm_source=cxrs_ ...

  8. Android上传文件到服务器500,使用WebUploader解决安卓微信浏览器上传图片中遇到的bug...

    摘自个人博客:走啊走的记录,欢迎点击查看,效果更佳! 微信浏览器上传图片bug的原因 微信在新版本中采用的是自己的X5内核浏览器,而在较老的版本中还有可能是安卓的原生浏览器.具体的环境我也不太了解,但 ...

  9. 使用GPS坐标查询国家以及城市名称,reverse_geocoder包用法

    这两天在做数据集分析,其中有一项是对数据来源国家出现的频率进行统计.找到一个很好用的包,可以使用GPS坐标查询国家以及城市名称,mark一下. import reverse_geocoder if _ ...

最新文章

  1. “AI下乡”:华为和袁隆平一起种海水稻,欲改造1亿亩良田
  2. 「情报局41」人工智能的下一个目标是什么?了解业务用例
  3. 这个椅子哪里卖?我也想买啊!
  4. Linux 适用硬件平台/系统架构(i386 / i586 / i686 / x86 / x86_64)名词理解和区别
  5. Java并发编程的基础-线程的生命周期
  6. 使用Spring-hadoop小结
  7. Linux 编程和系统管理新手入门
  8. 40vf什么意思_变频器的VF模式是什么意思?VF什么意思
  9. linux有两种工作界面,Linux 向用户提供了两种界面:用户界面和系统调用。
  10. java跳出循环break;return;continue使用
  11. CM3中数据传输对齐/非对齐方式
  12. Nginx学习笔记(三) Nginx基本数据结构
  13. 职业经理人-授权后才是管理的开始
  14. AMD新旗舰:短小精悍,干掉双芯卡
  15. My97时间控件限制
  16. 【坦白说】如何确定对方身份?
  17. 硬盘安装Win7全攻略(图解)
  18. Accessorize to a Crime: Real and Stealthy Attacks on State-of-the-Art Face Recognition
  19. HTML小说排行榜案例
  20. 82.【LibraryManger】

热门文章

  1. 资料搜集-JAVA系统的梳理知识10-操作系统
  2. 【论文综述】基于深度学习语音分离技术的研究现状与进展
  3. 天涯社区亲身案例,干货分享传统企业如何转型区块链 | 互链学院
  4. tensorflow GPU配置失败的几个解决方法
  5. 7-1 有重复的数据I (20 分)
  6. Mybatis 关联查询(一对一与一对多)
  7. 视频伪流技术(pseudostreaming)
  8. 江苏省2023年普通高等学校“专转本”选拔工作实施办法的通知
  9. md5校验 java_Java MD5校验
  10. python造数神器-Faker库