当前位置: 首页 > news >正文

网站推广应该怎么做/什么叫口碑营销

网站推广应该怎么做,什么叫口碑营销,网站首页banner设计,市场监督管理局12315前言:仿微信通讯录搜索功能,通过汉字或拼音首字母找到匹配的联系人并显示匹配的位置一:先看效果图字母索引搜索匹配二:功能分析1:汉字转拼音通讯录汉字转拼音(首个字符当考虑姓氏多音字), 现在转换拼音常见的有pinyin4j和tinypinyin, pinyin4j的功能强大,包含声调多音字,tinypi…

前言:

仿微信通讯录搜索功能,通过汉字或拼音首字母找到匹配的联系人并显示匹配的位置

一:先看效果图

18a7bdb8905a

字母索引

18a7bdb8905a

搜索匹配

二:功能分析

1:汉字转拼音

通讯录汉字转拼音(首个字符当考虑姓氏多音字), 现在转换拼音常见的有pinyin4j和tinypinyin, pinyin4j的功能强大,包含声调多音字,tinypinyin执行快占用内存少, 如果只是简单匹配通讯录,建议使用tinypinyin,用法也很简单这里不详细介绍

拼音类

public class CNPinyin implements Serializable, Comparable> {

/**

* 对应首字首拼音字母

*/

char firstChar;

/**

* 所有字符中的拼音首字母

*/

String firstChars;

/**

* 对应的所有字母拼音

*/

String[] pinyins;

/**

* 拼音总长度

*/

int pinyinsTotalLength;

public final T data;

CNPinyin(T data) {

this.data = data;

}

public char getFirstChar() {

return firstChar;

}

@Override

public String toString() {

StringBuilder sb = new StringBuilder().append("--firstChar--").append(firstChar).append("--pinyins:");

for (String str : pinyins) {

sb.append(str);

}

return sb.toString();

}

int compareValue() {

if (firstChar == DEF_CHAR) {

return 'Z' + 1;

}

return firstChar;

}

@Override

public int compareTo(CNPinyin tcnPinyin) {

int compare = compareValue() - tcnPinyin.compareValue();

if (compare == 0) {

String chinese1 = data.chinese();

String chinese2 = tcnPinyin.data.chinese();

return chinese1.compareTo(chinese2);

}

return compare;

}

}

2:定义索引栏 a~z,#控件

ItemDecoration配合RecyclerView实现StickyHeader效果,此效果很常见不详细介绍

3:根据转换好的拼音快速匹配

搜索匹配才是核心, 以下匹配原则,有优先顺序如果有匹配成功不执行后面的匹配原则

a:匹配原字符 并找出所匹配的起始位置与结束位置,如有中文匹配将不执行后面的拼音匹配原则

static CNPinyinIndex matcherChinese(CNPinyin cnPinyin, String keyword) {

if (keyword.length() < cnPinyin.data.chinese().length()) {

Matcher matcher = Pattern.compile(keyword, Pattern.CASE_INSENSITIVE).matcher(cnPinyin.data.chinese());

if (matcher.find()) {

return new CNPinyinIndex(cnPinyin, matcher.start(), matcher.end());

}

}

return null;

}

b:匹配单个字符拼音的首个字母(例如"游小陈"可以匹配y, x, c, yx, xc, yxc)

static CNPinyinIndex matcherFirst(CNPinyin cnPinyin, String keyword) {

if (keyword.length() <= cnPinyin.pinyins.length) {

Matcher matcher = Pattern.compile(keyword, Pattern.CASE_INSENSITIVE).matcher(cnPinyin.firstChars);

if (matcher.find()) {

return new CNPinyinIndex(cnPinyin, matcher.start(), matcher.end());

}

}

return null;

}

c:所有字符拼音的匹配, 且第一个匹配位置的拼音必须一致(例如"游小陈 youxiaochen", 必须匹配yo, you, xi, xia, xiao, ch, che, chen开头等 例如 yo youx, youxi, youxiao, xiaoc, xiaoch, xiaochen等等)

/**

* 所有拼音匹配

* @param cnPinyin

* @param keyword

* @return

*/

static CNPinyinIndex matchersPinyins(CNPinyin cnPinyin, String keyword) {

if (keyword.length() > cnPinyin.pinyinsTotalLength) return null;

int start = -1;

int end = -1;

for (int i = 0; i < cnPinyin.pinyins.length; i++) {

String pat = cnPinyin.pinyins[i];

if (pat.length() >= keyword.length()) {//首个位置索引

Matcher matcher = Pattern.compile(keyword, Pattern.CASE_INSENSITIVE).matcher(pat);

if (matcher.find() && matcher.start() == 0) {

start = i;

end = i + 1;

break;

}

} else {

Matcher matcher = Pattern.compile(pat, Pattern.CASE_INSENSITIVE).matcher(keyword);

if (matcher.find() && matcher.start() == 0) {//全拼匹配第一个必须在0位置

start = i;

String left = matcher.replaceFirst("");

end = end(cnPinyin.pinyins, left, ++i);

break;

}

}

}

if (start >= 0 && end >= start) {

return new CNPinyinIndex(cnPinyin, start, end);

}

return null;

}

/**

* 根据匹配字符递归查找下一结束位置

* @param pinyinGroup

* @param pattern

* @param index

* @return -1 匹配失败

*/

private static int end(String[] pinyinGroup, String pattern, int index) {

if (index < pinyinGroup.length) {

String pinyin = pinyinGroup[index];

if (pinyin.length() >= pattern.length()) {//首个位置索引

Matcher matcher = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE).matcher(pinyin);

if (matcher.find() && matcher.start() == 0) {

return index + 1;

}

} else {

Matcher matcher = Pattern.compile(pinyin, Pattern.CASE_INSENSITIVE).matcher(pattern);

if (matcher.find() && matcher.start() == 0) {//全拼匹配第一个必须在0位置

String left = matcher.replaceFirst("");

return end(pinyinGroup, left, index + 1);

}

}

}

return -1;

}

http://www.lbrq.cn/news/1237609.html

相关文章:

  • 郑州制作网站的基本流程/长沙百度网站推广优化
  • 网站建设与app开发/企业查询系统官网
  • 建站之星好不/台州seo优化公司
  • 冀州建设局网站/百度推广计划
  • 网站源码下载地址是什么/焦作seo推广
  • 大连网站建设-中国互联/网络营销的推广方式都有哪些
  • 深圳市住房和建设局网站-%3e认租申请/手机管家一键优化
  • php开源企业网站/网上怎么免费推广
  • 里水网站开发/企业营销策划方案范文
  • 大型手游网络游戏排行榜前十/上海优化营商环境
  • 东莞做网站定制/预防电信网络诈骗
  • 网站搭建的/站长之家排名查询
  • 曰本真人性做爰相关网站/西安百度竞价外包
  • 西部网站域名出售/360推广怎么收费
  • 阿里云服务器网站备份/免费发广告的网站
  • 大理建设工程信息网站/百度分析
  • 中国开头的网站怎么做/临沂今日头条新闻最新
  • 北京建设银行卡信用卡网站/5151app是交友软件么
  • 网站建设主要内容/微信营销怎么做
  • wordpress分类显示博客/论述搜索引擎优化的具体措施
  • 广东东莞石碣今天新闻/seo网络优化公司
  • 用自己的电脑做网站需要备案吗/线下推广团队
  • 网站建设小组五类成员/东莞seo代理
  • 安顺网站建设兼职/昆山网站建设
  • 留学中介网站建设方案/免费网站制作成品
  • 公司没有网站如何做外贸/爱站网站seo查询工具
  • 济宁建设局网站首页/百度普通收录
  • 跨境出口电商网站/哪里可以建网站
  • 网站做的漂亮的企业/培训机构哪家最好
  • 小公司做网站/百度收录网站提交入口
  • Removing Digits(Dynamic Programming)
  • 【MySQL】增删改查操作 —— CRUD
  • 嵌入式第十八课!!数据结构篇入门及单向链表
  • kong网关集成Safeline WAF 插件
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的视频摘要生成与智能检索优化进阶(377)
  • Sklearn 机器学习 文本数据 TF-IDF实现文本向量化