日期:2014-05-18  浏览次数:20640 次

按规律匹配手机号,怎么做?
按规律匹配手机号,怎么做?
公司有手机号码的excel ,想导入到数据库,
再导入前需要根据每个号码的规律,自动添加相应的号码规律项
规律的项有 : 
·ABAB ·AABB ·ABBA ·AAA ·升降序ABC ·AAAA ·升降序ABCD ·AABBCC ·AAABBB ·ABABAB 
·AABBCCDD ·AAAB ·AA ·AAAAA ·AAAAAA ·ABCDABCD ·ABABCDCD ·AABBB ·AAAABBBB ·AAABAAAB 
·AABBAABB ·AAAAB ·ABCABC ·AAABB ·ABBABB ·AAAABB 
譬如 13466360303 对应的就是ABAB 
13466363355 对应的就是AABB
13466367997 对应的就是ABBA
13466363888 对应的就是AAA
以此类推
升降序ABC 就像13466367123 13466367234 13466367567等
升降序ABCD 就像13466361234 13466365678

同时对后四位含6、8、9的号还需要如下匹配:
13466363366 对应的就是AA66
13466363388 对应的就是AA88
13466363399 对应的就是AA99

当这些号码批量导入数据库时,同时把它所对应的号码规律也添加进去

用正则还是用算法实现????请大家帮忙!!!!!

急啊!!!!

------解决方案--------------------
我觉得规律也不算多 对每种情况建一个条件分支来判断
最后达成给每个号码一个判断 贴上规律标签
------解决方案--------------------
可以使用正则表达式对字段进行匹配,正则表达式的使用方法请访问如下地址:
http://blog.sina.com.cn/s/blog_4eccd46201000d58.html


------解决方案--------------------
号码规律项具有重复,我的意思是符合AAAAA的号码同时也符合AAA不知到是想把这个号码属于两个类都是还是只属于AAAAA?
------解决方案--------------------
用正则表达式
------解决方案--------------------
用正则
------解决方案--------------------
Java code
//TEST
        String[] telNo = new String[]{
                "13421159889","13421159888","13421158888","13421158734"};
        for(int i=0;i<telNo.length;i++)
            System.out.println(matchType(telNo[i]));
          
 
       
    
    
    /**
     * 6、8、9的情况,跟升降序的情况没有考虑.
     * @param telNo
     * @return
     */
    public static String matchType(String telNo){
        String rtn = telNo;
        
        String[] match = {"ABBA","AABB","ABBB","AAAB","AABA","ABAA","AAAA","AAA","ABCD"};
        Arrays.sort(match);
        List list = Arrays.asList(match);
                        
        int len = 0;//替换位当前位置
        int loop = 1;//开始替换位
        int step = 0;
        String compare = "";
        String pat = "ABCD";
        while(loop<=11){
            if(compare.indexOf(telNo.substring(len,len+1)) == -1){
                rtn = rtn.replaceAll(telNo.substring(len,len+1), pat.substring(step,step+1));
                step++;
                compare += telNo.substring(len,len+1);
            }
            len++;
            
            //替换位置下移一位.
            if(len>=11 || step>=4){
                //查找匹配位置.
                Matcher m = Pattern.compile("A[ABCD]+$").matcher(rtn);
                if(m.find() && list.indexOf(m.group(0)) != -1){
                    return m.group(0);
                }
                //还原
                len = loop++;
                step = 0;
                compare = "";
                rtn = telNo;
            }
        }
    
        return rtn;
    }