一、目标
1、处理110、10086、座机等非手机号码的归属地;
二、代码实现
1、判断输入框中的文本是否符合手机号码的格式(1开头,第二位是345678,后面9位均为0-9的整数),根据手机号码的特点确定其正则表达式为“1[345678]\d{9}”,在代码中正则表达式以“^”开头,以“$”结束,同时里面的“\”需要转义,所以判断条件为“^1[345678]\\d{9}$”。上述正则表达式说明:[345678]表示“[]”里面的数任取一个,\d表示0-9的数任取一个,{9}表示前面的\d正好匹配9次。
2、在号码归属地查询工具类(NumberAddQueryUtils)的查询号码queryNumber(String number)方法中,在查询数据库之前将传入的号码(number)通过其matches(String regularExpression)方法
判断一下是否匹配手机号码的正则表达式,如匹配则查询数据库,如不匹配则查询另外的数据库(如110、10086、座机等);
手机号码的正则表达式:
1 number.matches("^1[345678]\\d{9}$")
3、通过传入的号码(number)的startsWith(String prefix)方法判断号码是否以“0”开头,若成立则截取号码前4位查询data2中的area获取归属地,再将归属地的后两位(电信、联通、移动)去除便可得到城市名,最后返回该值即可,另外需要处理010、021等3位数区号的特殊例子;
处理座机的代码:
1 //处理座机 2 if(number.startsWith("010")){ 3 location = "北京"; 4 }else if (number.startsWith("021")) { 5 location = "上海"; 6 }else if(number.startsWith("0")){ 7 Cursor cursor = database.rawQuery( 8 "select location from data2 where area = ?", 9 new String[] { number.substring(1, 4) }); 10 while (cursor.moveToNext()) { 11 location = cursor.getString(0).substring(0, cursor.getString(0).length()-2); 12 } 13 cursor.close(); 14 }
时间: 2024-10-01 07:35:51