当前位置:编程学习 > JAVA >>

输入一组手机号码,要求进行分析判断,并且返回处理后的数据

正在写一套短信群发的系统 
遇到一个棘手的问题,请教大家了

方法的需求大致是这样的: 

传入一组(可能是上百个)半角逗号隔开的手机号,要求把手机号按照运营商进行分类,再把手机号分别存到3个表的Nuber字段中. 还有个限制就是,那个Nuber字段每次只能存2个号码. 

比如入传入参数是(1118,3332,1114,1115,2224,2225,3336,2226,2228,3339,1119,1110) ,

这里的111,222,333只是便于辨认,并不是说就是这样的号码,因此可能不能用正则表达式进行拆分.

经过处理,我要存到数据库的内容是这样的
表1
ID Nuber 
1 1118,1114 
2 1115,1119 
3 1110

表2
ID Number 
1 2224,2225 
2 2226,2228 

表3
ID Number 
1 3332,3336 
2 3339 

关于手机号码处理的这部分,希望有人能帮助一下小弟,下面贴出部分代码,大家帮忙参考一下(超出2个号码的处理,还没做).


/**
 * 检测参数中手机号(或手机号列表)的合法性. 
 * 参数mobiList为空,则返回空;
 * 参数中有非手机号码,则返回空.
 * 
 * @param mobiList
 *            :发送对象手机号(或手机号列表,用半角逗号分隔)
 * @return mobiLists
 */
@SuppressWarnings({ "rawtypes", "unchecked" })
public static List CheckMobi(String mobiList) {
// 如果参数中没有手机号码,则返回空
if (("".equals(mobiList)) || (null == mobiList)) {
return null;
}
// 手机号码用半角逗号分开
String[] tmpArr = mobiList.split(",");
// 处理后的手机号列表
List mobiLists = new ArrayList();
// 移动手机号
StringBuffer mobi_m = new StringBuffer();
// 联通手机号
StringBuffer mobi_u = new StringBuffer();
// 电信手机号
StringBuffer mobi_t = new StringBuffer();
// 进行分析处理
for (int i = 0; i < tmpArr.length; i++) {
// 检测号码是否满足11位
if (tmpArr[i].length() != 11) {
return null;
}
// 获取此号码号段信息
smsPrefix = CheckPrefixExist(tmpArr[i].substring(0, 3));
// 如果号段信息不存在,则返回空
if ("".equals(smsPrefix) || null == smsPrefix) {
return null;
}
// 将不同运营商的号码放入不同分组
switch(Integer.parseInt(smsPrefix.getStatus()))
{
case 0:
mobi_m.append(tmpArr[i]).append(",");
break;
case 1:
mobi_m.append(tmpArr[i]).append(",");
break;
case 2:
mobi_m.append(tmpArr[i]).append(",");
break;
}
}
mobiLists.add(mobi_m);
mobiLists.add(mobi_u);
mobiLists.add(mobi_t);
return mobiLists;
}
--------------------编程问答-------------------- --------------------编程问答-------------------- 谢谢帮顶.大家帮我一下吧,只要算法上的提示就行.

最主要是这里想不出办法:

传入一组未知个数的手机号码,如(1111,1112,1113,1114,1115,1116,1117)

怎么能给他存到一个数组,数组内容如下:
1111,1113
1113,1114
1115,1116
1117

红色部分不会写了.大家帮忙看下



/**
 * 将传入的手机号按照规定的个数,进行拆分. 
 * 参数mobiList为空,则返回空.
 * 
 * @param mobiList
 *            :发送对象手机号(或手机号列表,用半角逗号分隔)
 * @return splitMobiArr
 */
public static String[] splitMobi(String mobiList) {
// 处理用半角逗号分开的手机号码列表,存入数组中
String[] tmpArr = mobiList.split(",");
// 定义每个元素保存手机号码个数
int maxNum = 2;
// 初始化返回数组大小arrNum
int arrNum = 0;
// 判断号码列表是否规定个数的整数倍
if(tmpArr.length % maxNum == 0)
{
arrNum = tmpArr.length / maxNum;
}
// 未除尽
else
{
arrNum = tmpArr.length / maxNum + 1;
}
// 此字符串数组,存放分隔好的字符串
String[] splitMobiArr = new String[arrNum];
for (int i = 0; i < splitMobiArr.length; i++) {
StringBuffer sb = new StringBuffer();
for (int j= 0; j < maxNum; j++) {
int suns = i * maxNum + j;
sb.append(tmpArr[suns]);
}
splitMobiArr[i] = sb.toString();
} return splitMobiArr;
}
--------------------编程问答-------------------- 这个用正则表达式可以实现的哦!!!!(不要怀疑我没有理解你的意思!我说的是真的) --------------------编程问答-------------------- 学习啦 --------------------编程问答--------------------
引用 3 楼 gentleboy2009 的回复:
这个用正则表达式可以实现的哦!!!!(不要怀疑我没有理解你的意思!我说的是真的)


我这里举例的字符串只是例子,其实真正要处理的是手机号.
是不能按照111,222,333的规律进行分组的
130,131,132....这些号段对应的运营商数据保存在数据库. --------------------编程问答-------------------- 我只能告诉你正则表达式很强大很强大。。。。 --------------------编程问答-------------------- 用一个数组作为判断缓存处理用, --------------------编程问答-------------------- 这是一组 手机号。。如果是一个公司员工。10000多个手机号呢??在循环手机号时,不会死机吗??这样如何处理??
补充:Java ,  Java相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,