按拼音、首字母搜索手机通讯录,自定义键盘搜索手机通讯录

package contacters;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;

import java.util.Random;

public class Test {

static Map<String, HashMap<String, Contact>> maps = new HashMap<String, HashMap<String, Contact>>();

static {

HashMap<String, Contact> cons = new HashMap<String, Contact>();

for (int i = 0; i < 1000; i++) {

String phone = getNumber(11);

if (!cons.containsKey(phone))

cons.put(phone, new Contact(getChar(6), getChar(10), phone,

getChar(4)));

}

maps.put("0", cons);

// 初始化,将所有联系人添加到lists

}

/**测试**/

public static void main(String[] args) {

search("3");

search("35");

search("356");

search("3567");

search("35678");

search("356781");

search("3567814");

search("35678147");

search("356781477");

search("3567814779");

search("35678147795");

for (int i = 0; i <= 10; i++) {

System.out.println(maps.get(i + "").size());

}

HashMap<String, Contact> a = maps.get("3");

for (Entry<String, Contact> entry : a.entrySet()) {

Contact con = entry.getValue();

System.out.println("------name:" + con.getName() + "---index:"

+ con.getIndex() + "-----pingyin:" + con.getPingyin());

List<String> contacts = getCombination("356");

for (String inputCon : contacts) {

if (con.getName().contains(inputCon)

|| con.getPingyin().contains(inputCon)

|| con.getIndex().contains(inputCon)) {

System.out.println(inputCon + ":"

+ con.getName().contains(inputCon) + "--"

+ con.getPingyin().contains(inputCon) + "--"

+ con.getIndex().contains(inputCon));

}

}

}

// List<String> contacts = getCombination("3567");

}

/**

* 搜索

* @param number

*/

public static void search(String number) {

HashMap<String, Contact> result = new HashMap<String, Contact>();

if(number.contains("0")||number.contains("1")){

maps.put(number.length()+"", result);

return;

}

List<String> contacts = getCombination(number);

HashMap<String, Contact> currentCantacts = maps

.get((number.length() - 1) + "");

for (String inputCon : contacts) {

for (Entry<String, Contact> entry : currentCantacts.entrySet()) {

Contact con = entry.getValue();

if (con.getName().contains(inputCon)

|| con.getPingyin().contains(inputCon)

|| con.getIndex().contains(inputCon)) {

result.put(con.getPhone(), con);

}

}

}

maps.put(number.length() + "", result);

}

/**

* 获取组合

*

* @param number

* @return

*/

public static List<String> getCombination(String number) {

List<String> oldList = new ArrayList<String>();

List<String> newList = new ArrayList<String>();

String strs[] = getNumbers(number.charAt(0) + "");

for (String str : strs) {

oldList.add(str);

}

if (number.length() == 1) {

return oldList;

}

for (int i = 1; i < number.length(); i++) {

strs = getNumbers(number.charAt(i) + "");

if (strs != null) {

newList.clear();

for (String old : oldList) {

for (String str : strs) {

newList.add(old + str);

}

}

oldList.clear();

oldList.addAll(newList);

}

}

return newList;

}

public static String[] getNumbers(String str) {

switch (str) {

case "2":

return new String[] { "a", "b", "c" };

case "3":

return new String[] { "d", "e", "f" };

case "4":

return new String[] { "g", "h", "i" };

case "5":

return new String[] { "j", "k", "l" };

case "6":

return new String[] { "m", "n", "o" };

case "7":

return new String[] { "p", "q", "r", "s" };

case "8":

return new String[] { "t", "u", "v" };

case "9":

return new String[] { "w", "x", "y", "z" };

default:

return null;

}

}

public static String getNumber(int num) {

Random random = new Random();

String temp = "";

for (int i = 0; i < num; i++) {

temp = temp + random.nextInt(9);

}

return temp;

}

public static String getChar(int num) {

String md = "abcdefghijkmnpqrstuvwxyzabc";

Random random = new Random();

String temp = "";

for (int i = 0; i < num; i++) {

temp = temp + md.charAt(random.nextInt(24));

}

return temp;

}

}

package contacters;

public class Contact {

private String
name;

private String
pingyin;

private String
phone;

private String
index;

public Contact(String name,String pingyin,String phone,String index){

this.name = name;

this.pingyin = pingyin;

this.phone = phone;

this.index = index;

}

public String getName() {

return
name;

}

public void setName(String name) {

this.name = name;

}

public String getPingyin() {

return
pingyin;

}

public void setPingyin(String pingyin) {

this.pingyin = pingyin;

}

public String getPhone() {

return
phone;

}

public void setPhone(String phone) {

this.phone = phone;

}

public String getIndex() {

return
index;

}

public void setIndex(String index) {

this.index = index;

}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-25 15:21:28

按拼音、首字母搜索手机通讯录,自定义键盘搜索手机通讯录的相关文章

【Solr】 solr对拼音搜索和拼音首字母搜索的支持

问:对于拼音和拼音首字母的支持,当你在搜商品的时候,如果想输入拼音和拼音首字母就给出商品的信息,怎么办呢? 实现方式有2种,但是他们其实是对应的.  用lucene实现 1.建索引, 多建一个索引字段,即拼音和拼音首字母这2个字段.合并的一个字段.  (拼音和拼音首字母,可以通过pinyin4j.jar.将想要进行拼音搜索的字段进行拼音转换.) 2.对输入的参数判断是否是拼音,(可以通过将传人的值转换为 utf-8 形式,如果转换后的字符串长度大于原来的字符串的长度,那么就不是拼音.否则就进行拼

iOS拼音搜索,拼音首字母搜索

扩展了一下 搜索框,能够实现拼音和首字母模糊搜索 基本搜索 [上一篇文章 ](https://www.cnblogs.com/wjw-blog/p/10724043.html iOS8之后搜索框的常规实例) #import "NSString+utility.h" @interface WJWPinyinSearchViewController ()<UISearchResultsUpdating,UITableViewDelegate,UITableViewDataSource

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

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

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

实现效果: 图一: 图二: 此例中输入的中文字符串"万万保重",有三个字是多音字,所以alert对话框中显示的是多种读音的组合: 如何实现? 如何实现通过拼音首字母快速查找页面内的中文内容呢? 过程原理是这样的:例如要对一些人名进行快速查找,当页面加载完成后,对所有人名建立一个索引,生成拼音首字母与姓名的对应关系:然后监听键盘事件,当用户按下键盘时,根据键值得到按下的是哪个字母,然后遍历索引中是否存在相同的拼音首字母: 这里还实现了根据字母组合来查找的功能,原理是这样的:当用户按键时,

利用排序规则特点计算汉字笔划和取得拼音首字母

SQL SERVER的排序规则平时使用不是很多,也许不少初学者还比较陌生,但有一个错误大家应是经常碰到: SQL SERVER数据库,在跨库多表连接查询时,若两数据库默认字符集不同,系统就会返回这样的错误:     "无法解决 equal to 操作的排序规则冲突." 一.错误分析: 这个错误是因为排序规则不一致造成的,我们做个测试,比如:create table #t1(name varchar(20) collate Albanian_CI_AI_WS, value int) cr

【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 &

dedecms5.7添加栏目时以简拼作目录名 以拼音首字母作文件夹名称

今天分享DedeCMS添加栏目的一个小技巧,添加栏目以简拼作目录名,以拼音首字母作文件夹名称,默认情况情况下,DedeCMS添加栏目时是以全拼作为文件夹名称,后台也没有提公简拼的选项,但是我们可以通过修改源码的方式实现.因为DedeCMS在获取栏目目录名的时候,是利用的string助手的一个GetPinyin方法,具体这个方法可以见:http://www.heliweb.net/PHPDOC/DedeCMS-Helpers/_include---helpers---string.helper.p

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

今天我们就简单的实现一下城市的排序 读取我们城市的信息并通过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

php 中文转拼音首字母问题

<?php /* 中文汉字转拼音首字母的PHP简易实现方法. 要求: 只能是GB2312码表里面中文字符 转换得到字符串对应的拼音首字母大写. 用法: echo zh2py::conv('Chinese 中华人民共和国');//Chinese ZHRMGHG 或 $py = new zh2py; echo $py->conv('Chinese 中华人民共和国');//Chinese ZHRMGHG */ class zh2py { //根据汉字区位表 //我们可以看到从16-55区之间是按拼音