往代表号码段的字符串里添加新号码段,求结果串。

原创 2012年03月28日 21:33:21
import java.util.Arrays;
import java.util.Scanner;

/**
 * 往代表号码段的字符串里添加新号码段,求结果串。 
 * codes: 代表号码段的字符串,格式如:5-20,30-50,78-90 
 * code: 新号码段,格式如:22-29 
 * return: 结果串,要注意号码段合并处理,如以上结果应该为: 5-20,22-50,78-90 
 * 而不是:5-20,22-29,30-50,78-90 不用考虑号码重复问题,即以上串不会添加10-40
 */
public class Numberinsert {
	// 系统入口的方法
	public static void main(String[] args) {
		// 实例化类获取一个实例(可以把下面的方法改为static,就可以直接使用类名调用)
		Numberinsert numberinsert = new Numberinsert();
		// 获取控制台要测试的情况
		Scanner scanner = new Scanner(System.in);
		while (true) {
			System.out.println("********请输入数字1或2或3进行测试(输入4退出系统)********");
			int index = scanner.nextInt();
			switch (index) {
			case 1:
				// 传入测试的号码字符串
				System.out.println(numberinsert.getString("5-20,30-50,78-90",
						"22-29"));// 情况一
				break;
			case 2:
				System.out.println(numberinsert.getString("5-20,30-50,78-90",
						"21-29"));// 情况二
				break;
			case 3:
				System.out.println(numberinsert.getString("5-20,30-50,78-90",
						"60-70"));// 情况三
				break;
			case 4:
				System.out.println("欢迎再次测试本系统...再见");
				System.exit(0);
			default:
				break;
			}
		}
	}

	// 返回新的号码段
	public String getString(String codes, String code) {
		// 拆分原号码段("5-20,30-50,78-90"转变成["5-20","30-50","78-90"])
		String[] numbers = this.getNumbers(codes);
		// 用于获取号码段两头的数值
		int[] number = null;
		// 这个数值数组用于原号码段数字与新插入号码段数字存储/对比之用
		int[] num = new int[numbers.length * 2 + 2];
		// 用于标识数组下标
		int n = 0;
		for (String str : numbers) {
			// 取出原号码段中的数字放入int型数组中
			number = this.getNumber(str);
			num[n] = number[0];
			n++;
			num[n] = number[1];
			n++;
		}
		// 获取插入号码段的数值
		number = this.getNumber(code);
		int insert1 = number[0];
		int insert2 = number[1];
		// 用于标识是否有必要把新号码段的数值存入上面的int型数组
		boolean insert1b = false;
		boolean insert2b = false;
		for (int i = 0; i < num.length; i++) {
			// 原号码段数值中是否存在于新号码段相邻的数值
			int increase = num[i] + 1;
			int decrease = num[i] - 1;
			if (increase == insert1) {
				// 这里使用数组中0为无效的数值
				num[i] = 0;
				insert1b = true;
			}
			if (decrease == insert2) {
				num[i] = 0;
				insert2b = true;
			}
		}
		if (!insert1b) {
			num[num.length - 2] = insert1;
		}
		if (!insert2b) {
			num[num.length - 1] = insert2;
		}
		// 把新数组排序
		Arrays.sort(num);
		// 用于构造新的号码段
		StringBuilder result = new StringBuilder();
		for (int j = 0; j < num.length; j++) {
			if (num[j] != 0) {
				result.append(num[j] + "-" + num[++j] + ",");
			}
		}
		// System.out.println(result.toString().substring(0, result.length() - 1));
		return result.toString().substring(0, result.length() - 1);
	}

	// 拆分原号码段的方法
	public String[] getNumbers(String codes) {
		return codes.split(",");
	}

	// 拆分号码段的数字(如:22-29,拆分为22,29两个数值)
	public int[] getNumber(String code) {
		String[] number = code.split("-");
		int[] num = { Integer.valueOf(number[0]), Integer.valueOf(number[1]) };
		return num;
	}
}

手机号码段简介以及最新手机号段归属地数据库(2017年6月28日)

什么是手机号码段? 我国使用的手机号码为11位,其中各段有不同的编码方向:前3位—网络识别号;第4-7位—地区编码;第8-11位—用户号码。号码也就是所谓的MDN号码,即本网移动用户作被叫时,主叫用户...
  • FL1623863129
  • FL1623863129
  • 2017年06月28日 07:56
  • 2379

详解android的号码匹配

什么是号码匹配,个人理解,即判断两组号码是否属于同一个号码。在实际使用过程中,接触到的号码会涉及到区号,国家编码以及IP号码等,这个时候就用到了号码匹配。两个内容不一样的号码,如+86***和1795...
  • xingfeng2010
  • xingfeng2010
  • 2014年04月28日 16:23
  • 3614

手机IMSI号码编码规则表(转载)

MCC:  移动国家码,三个数字,如中国为 460 MNC:移动网号,两个数字,如中国移动的MNC为00(联通是01,移动159新号段是02,更多在此) MSIN:移动客户识别号,在某一PLMN中...
  • qq_35242986
  • qq_35242986
  • 2017年03月30日 16:41
  • 1913

手机号段分配规则

第一部分:三大运营商最新的手机号段分配情况 移动: 134X(0-8)、135、136、137、138、139、150、151、152、157X(0-7\9)(TD)、158、159、182 、18...
  • Buaaroid
  • Buaaroid
  • 2015年12月29日 10:59
  • 7464

sap 销售订单过量交货和拣配有关设置

拣配有关: 【拣配或撤下相关】 标识该类型的交货项目是与拣配相关还是与入库相关。 使用 在向外交货的情况下,只有与拣配相关的交货项目将转移至仓库管理 (WM) 组件。某些项...
  • zhongguomao
  • zhongguomao
  • 2016年10月11日 12:47
  • 1608

汇编程序——把数据段中的串string1传送到附加段的string2中

源代码:data segment ;定义数据段 string1 db ‘assembly language’ data ends extra segment ;定义附加段 stri...
  • Valieli
  • Valieli
  • 2016年10月23日 17:47
  • 1811

最新手机号段归属地数据库(2018年01月01日) 包括 电信199和联通166 新号段

2017年12月1日版   377357条记录(含电信199号段) 最新 手机号段数据库 号码归属地数据库  移动号段 联通号段 电信号段 170 171 号段(虚拟运营商)    权威  全面  准...
  • zengzhan
  • zengzhan
  • 2016年07月21日 02:04
  • 6078

面试题:如何在一千万个不重复整数(电话号码)中查找某个特定数 位运算 bitmap

面试题:某城市有一千万个电话号码,如何快速找到某个电话号码,考虑优化时间和空间复杂度,同时考虑内存限制。同类变形:Given 2MB memory, we want to store 5 millio...
  • yangliuy
  • yangliuy
  • 2015年01月19日 16:52
  • 3199

SD销售凭证改号码段

跨年的时候SD销售凭证需要改号码段,方法如下: 比如进入2016年,号码段需要改为16开头,需要先进如下路径 然后选择状态 将号码编号范围改为0 然后点间隔 将1...
  • yuqinying112
  • yuqinying112
  • 2013年12月05日 14:18
  • 604

SAP号码段配置-SNRO/SNUM

T-CODE: SNRO、SNUM 1.创建一个号码段对象 2.设置编号长度域、警告(注意:必须是SAP系统已定意的域) 3.设置缓冲,优点:不直接去数据库里取数,提升效率;缺点:存在跳...
  • Ling_0309
  • Ling_0309
  • 2018年01月12日 16:56
  • 3
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:往代表号码段的字符串里添加新号码段,求结果串。
举报原因:
原因补充:

(最多只允许输入30个字)