这是IndexableListView项目详解系列的第二篇博客,还没看第一篇博客的小伙伴们建议先看哦,链接: IndexableListView详解之——IndexableListViewActivity,简单介绍了整个项目的结构、讲解了IndexableListViewActivity。
这里来讲一讲IndexableListView项目中用到的字符匹配工具类StringMatcher,整个功能实现很简单,直接上代码哈。
StringMatcher
因为作者是韩国人,源码中有许多关于韩文的判断和方法,都被我删掉啦,这个match方法只面向英文字符哈。如果需要匹配中文,还需要做一系列处理,有兴趣的小伙伴自己研究哈。
public class StringMatcher {
/**
* 匹配value和keyword
* @param value 列表项的内容
* @param keyword 索引列表中的字符
*/
public static boolean match(String value, String keyword) {
if (value == null || keyword == null)
return false;
if (keyword.length() > value.length())
return false;
int i = 0,j = 0;
/*
* 匹配方法1:
* 判断value中是否包含keyword,若包含则返回true,否则返回false
*/
do {
if (value.charAt(i) == keyword.charAt(j)) {
i++;
j++;
}else if(j > 0){
break;
}else{
i++;
}
} while (i < value.length() && j < keyword.length());
return (j == keyword.length());
/*
* 匹配方法2:
* 判断value是否以keyword开头,若是则返回true,否则返回false
*/
// for(int i=0;i<keyword.length();i++){
// if(value.charAt(i) != keyword.charAt(i)){
// return false;
// }
// }
// return true;
}
}
讲解
1.首先match方法中有两个判断语句:1)若传入参数中只要有一个为null则返回false 2)若value的长度小于keyword的长度,则返回false
2.匹配方法1:这是项目中原来的代码,这样判断只需满足keyword包含在value中即返回true。但在IndexableListViewActivity中调用该方法传入的参数为item内容的第一个字符和索引字符,可以看出该功能的实现大于实际的需求,可能是为了以后方便扩展功能吧。
3.匹配方法2:这是我自己写的匹配方法,非常简单的逻辑,只是为了方便大家理解哈。
谢谢支持!!