Java字母笔顺_Android实现中文汉字笔划(笔画)、中文拼音排序、英文排序

一、需求描述

最近要做一个类似微信的,在登录界面选择国家地区的功能,微信有中文汉字笔画排序以及中文拼音排序等几种方式,如下所示:

微信:简体中文、拼音排序

410cc3bd234de09fdff7929e9b6cb329.png

微信:繁体中文、笔画排序

9fe12b7a466fa68756324b913f2c5656.png

微信 英文 字母排序

a4740f2ca9e4743df19de50e08e841cf.png

二、实现效果

下面看看我的Demo实现的效果

简体中文、拼音排序

65eed3a25adae678a3764cde15ba8d8f.png

繁体中文、笔画排序

dd9138ec6a1e22a604ede874ca5c7505.png

英文 字母排序

9f7491b13e7d8160f3671109eadd2ae2.png

其他语言,显示其他语言,排序按照对应的英文名来排序

dce4be36614d4a79b83d143233bd4fad.png

三、实现过程

在将这部分代码抽取出来,做了一个demo。项目结构如下所示:采用策略模式,分别有EnglishSortStrategy、PinyinSortStrategy、StrokeSortStrategy三种策略,分别表示英文排序策略、拼音排序策略、汉字笔画排序策略。

+ 拼音排序

通过pin4j工具类将汉字转换为拼音,然后按照拼音的字母进行排序。

+ 笔画排序

通过查找汉字笔画数据库,将每个汉字对应的笔画数、汉字、汉字对应的编码映射到map中,然后通过查询map找到每个汉字的笔画,最终按照笔画数目进行排序。

+ 英文排序

直接通过英文的字母顺序进行排序即可。

1e4683608030dbb6129e14c350758c80.png

f4e27dfe1141540913c5e3bd24bb0018.png

三种排序策略具体实现:

b4f607786d4b7bffbd5ae6f1ffb2c654.png

5769b4b281e3109ce1534befb55ae39b.png

ISortStrategy.java 排序策略接口

package com.oyp.sort.strategy;

import android.content.Context;

import com.oyp.sort.adapter.CountryOrRegionAdapter;

import com.oyp.sort.bean.CountryOrRegion;

import java.util.List;

/**

* 排序的策略

*/

public interface ISortStrategy {

/**

* 获取排序过后的国家区域列表

*

* @param countryOrRegionList 待排序的国家区域列表

* @return 排序过后的国家区域列表

*/

List getSortedCountryOrRegionList(List countryOrRegionList);

/**

* 获取要展示的排序的title 拼音排序显示 首字母,笔画排序显示 几划

*

* @param countryOrRegion 封装的CountryOrRegion

* @return 要展示的排序的title

*/

String getSortTitle(CountryOrRegion countryOrRegion,Context context);

/**

* 根据ListView的当前位置获取排序标题 是否需要显示的对比值:

* - 拼音排序返回首字母的Char ascii值

* - 笔画排序返回首字母的汉字笔画数量

*

* @param list 数据List集合

* @param position 位置

* @return 是否需要显示的对比值

* - 拼音排序返回首字母的Char ascii值

* - 笔画排序返回首字母的汉字笔画数量

*/

int getSectionForPosition(List list, int position);

/**

* 获取第一次或者是最后一次 出现该排序标题的位置

*

* @param list 排序列表

* @param section 排序标题的值:拼音排序首字母的Char ascii值,笔画排序出现的笔画数

* @param isFirst 是否是第一次

* @return 第一次或者是最后一次 出现该排序标题的位置

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值