汉字转成拼音做索引栏

从某地下载的json格式为

[
   {
    id: 34, name: "阿尔法罗密欧" },
   {
    id: 35, name: "阿斯顿·马丁" },
   {
    id: 221, name: "安凯客车" },
   ...
   // 大约200多个品牌 放在移动端选择不友好
]

于是乎,我想到可以做索引栏,就是按照首字母排序!
在这里插入图片描述
但是我拿到的json 就只有id和name;
换一套是不可能的,pc端老数据都是这个id;


于是我就上npm库搜了一下;
还真搜到一个叫做pinyin的插件,大体用法就是你传字符串进去,可以得到拼音;
地址: https://www.npmjs.com/package/pinyin
在这里插入图片描述
切记使用这个属性,不然带声调的会影响toLocaleUpperCase()这个方法;

我用的是vant索引栏;
所以数据格式变成下面就可以用了

carBrandList: {
   
   A:[
       {
   
          id:12,
          name:'奥迪',
       },
       
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我来回答你的问题。 首先,你需要在你的布局文件中添加一个RecyclerView,如下所示: ```xml <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 然后,在你的Activity或Fragment中,你需要定义一个适配器(Adapter)和数据源(List)用于为RecyclerView提供数据。在这个例子中,我们将使用一个包含应用程序包名的字符串列表来作为数据源。 ```java private List<String> packageNameList = new ArrayList<>(); private RecyclerView recyclerView; private PackageListAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView = findViewById(R.id.recyclerView); // 获取所有应用程序包名 PackageManager pm = getPackageManager(); List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA); for (ApplicationInfo packageInfo : packages) { packageNameList.add(packageInfo.packageName); } // 对包名按照拼音首字母进行排序 Collections.sort(packageNameList, new PinyinComparator()); // 初始化RecyclerView adapter = new PackageListAdapter(this, packageNameList); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setAdapter(adapter); } ``` 在上面的代码中,我们使用PackageManager获取了所有应用程序的包名,并将它们添加到了一个字符串列表(packageNameList)中。然后,我们使用PinyinComparator类对包名列表进行排序,以便按照拼音首字母进行显示。最后,我们初始化了RecyclerView,将适配器(Adapter)和数据源(List)传递给RecyclerView。 接下来,我们需要定义一个用于将汉字转换拼音PinyinUtil类。在这个类中,我们将使用android系统自带的HanziToPinyin类来实现汉字拼音的功能。 ```java public class PinyinUtil { /** * 将汉字转换拼音 * * @param chinese 中文字符串 * @return 拼音字符串 */ public static String getPinyin(String chinese) { StringBuilder pinyin = new StringBuilder(); char[] chars = chinese.toCharArray(); for (char c : chars) { String[] pinyinArray = HanziToPinyin.getInstance().get(c); if (pinyinArray != null && pinyinArray.length > 0) { pinyin.append(pinyinArray[0]); } else { pinyin.append(c); } } return pinyin.toString(); } } ``` 在上面的代码中,我们定义了一个getPinyin方法,它将一个中文字符串作为参数并返回一个拼音字符串。在这个方法中,我们首先将中文字符串转换为一个字符数组,然后遍历每个字符。对于每个字符,我们使用HanziToPinyin类获取其对应的拼音数组,然后将第一个拼音添加到StringBuilder对象中。如果该字符没有对应的拼音,则将其原样添加到StringBuilder对象中。最后,我们将StringBuilder对象转换为一个字符串并返回。 最后,我们需要定义一个PinyinComparator类,它将用于按照拼音首字母对包名进行排序。 ```java public class PinyinComparator implements Comparator<String> { /** * 比较两个包名的拼音首字母 * * @param o1 包名1 * @param o2 包名2 * @return 比较结果 */ @Override public int compare(String o1, String o2) { String pinyin1 = PinyinUtil.getPinyin(o1); String pinyin2 = PinyinUtil.getPinyin(o2); return pinyin1.compareToIgnoreCase(pinyin2); } } ``` 在上面的代码中,我们定义了一个compare方法,它将两个包名作为参数并返回一个整数。在这个方法中,我们首先将两个包名分别转换拼音字符串,然后使用String类的compareToIgnoreCase方法比较它们的拼音首字母。如果两个包名的拼音首字母相同,则比较它们的Unicode编码。 现在,我们已经完成了实现,可以通过运行应用程序来测试它。当我们滚动RecyclerView时,字幕条索引将会显示在右侧,点击字幕条索引将会自动滚动到相应的位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值