`
roway
  • 浏览: 48168 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

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

 
阅读更多
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;
	}
}

分享到:
评论

相关推荐

    Java字符串常用方法

    判断字符串为空 判断Email有效性 判断身份证号码有效性 判断手机号码有效性 判断是否含有特殊字符 ...截取字符串从开始到给定长度的一段 判断字符串是否以某个前缀开头 判断字符串是否以某个后缀结尾

    java判断一段话中是否有电话号码,并将其进行隐藏

    java判断一段话中是否有电话号码,并将其进行隐藏

    linxl-address:将一个包含姓名、地址和手机电话号码的字符串拆分开来

    linxlAddress将一个包含姓名、地址和手机/电话号码的字符串拆分开来。base [removed][removed] [removed] console.log(linxlAddress('18300000000赵三广东广州天河区林和中路11号')) [removed]npmnpm install ...

    Android编程实现从字符串中查找电话号码的方法

    本文实例讲述了Android编程实现从字符串中查找电话号码的方法。分享给大家供大家参考,具体如下: /** * 从字符串中查找数字字符串 */ private List&lt;String&gt; getNumbers(String content) { List&lt;String&gt; ...

    C语言程序设计标准教程

     本程序中用赋值语句给num和name两个成员赋值,name是一个字符串指针变量。用scanf函数动态地输入sex和score成员值,然后把boy1的所有成员的值整体赋予boy2。最后分别输出boy2 的各个成员值。本例表示了结构变量的...

    收集整理的SQL Server自定义函数

    3.求第一个字符串中第二个串的个数 6 4.综合模糊查询 6 5.将十进制转成十六进制 8 6.求两个字符串中相同的汉字及字母的个数 10 7.生成n位随机字符串 11 8.取出字符串中的汉字、字母或是数字 14 9.根据字符分割字符串...

    iOS分配终端界面功能实现:1、拆分SN 2、计算SN个数( 号段用‘-’连接;每批号段请用‘,’|‘隔开或分行)

    1、核心功能点:切割多条 SN、计算SN...字符串拆分: 规则SN号段用‘-’连接;每批号段请用‘,’'|'隔开或分行 取出字符串中的数字,用于计算SN个数 3、原文:https://kunnan.blog.csdn.net/article/details/116303608

    使用 Raspberry Pi 进行字符识别:使用 Matlab 和 Raspberry Pi 2 Model B 的图像处理和字符识别系统。-matlab开发

    结果字符串与预先输入的车牌号码进行比较,正或负匹配将导致树莓派打开绿色或红色 LED。 图形用户界面的设计目的是将获取的图像与描绘预处理算法各个阶段的图像一起显示。 检测到的字符串也显示为比较结果。 预处理...

    JavaScript经典实例

     2.5使用新字符串替换模式  2.6使用捕获圆括号交换一个字符串中的单词  2.7使用正则表达式来去除空白  2.8使用命名实体来替代HTML标签  2.9搜索特殊字符  第3章日期、时间和定时器  3.0简介  3.1打印出今天...

    使用java-jsoup解析html页面内容,爬取想要的信息(如号段)

    它提供了一套非常省力的 API,可...如:我们可以通过访问号段查询页面,获取到手机号段信息,并提取信息存储供自身的业务使用。 附件提供了详细的介绍,并通过http get请求方式抓取页面内容的java代码以及jsoup jar包。

    利用jquery扩展的验证工具库

    isEmpty: 测试传入的字符串是不是空白字符串,返回true或false isDigit: 测试传入的字符串是不是全部由0-9组成,返回true或false isLetter:测试传入的字符串是不是全部由A-Z或a-z组成,返回true或false ...

    《javaScrip开发技术大全》源代码

    • sample21.htm 通过字符串的起始位置和结束位置来获得子字符串 • sample22.htm slice()方法的使用 • sample23.htm substr()方法的使用 • sample24.htm 查找子字符串在字符串中...

    delphi 开发经验技巧宝典源码

    0095 使用Length函数取得一段字符串的长度 65 0096 使用Pos函数返回子字符串第一次出现的索引值 66 0097 使用Quotedstr函数返回字符串的引证串 66 0098 使用Trim函数删除字符串的首尾空格 66 4.2 数学计算...

    delphi 开发经验技巧宝典源码06

    0095 使用Length函数取得一段字符串的长度 65 0096 使用Pos函数返回子字符串第一次出现的索引值 66 0097 使用Quotedstr函数返回字符串的引证串 66 0098 使用Trim函数删除字符串的首尾空格 66 4.2 数学计算...

    PHP程序开发范例宝典III

    实例115 验证字符串是否以指定字符串开头 172 实例116 验证身份证号码 174 实例117 验证护照编号 175 实例118 验证车牌号码 176 4.4 自定义验证 177 实例119 验证合法的数据表名称 178 实例120 验证...

    JS正则表达式教程.txt

    判断字符串是不是由数字组成... 3 电话号码正则... 3 手机号码正则表达式... 4 使用正则表达式实现删除字符串中的空格:... 4 限制文本框只能输入数字和小数点等等... 5 替换小数点前内容为指定内容... 5 只匹配中文...

    C#编程经验技巧宝典

    79 &lt;br&gt;0115 如何判断是否为数字 79 &lt;br&gt;0116 如何在字符串中查找指定字符 79 &lt;br&gt;0117 如何在字符串中用一子串替换另一子串 80 &lt;br&gt;0118 将新字符串添加到已有字符串中 80 &lt;br&gt;0119 如何在...

    经典JavaScript正则表达式实战

    判断字符串是不是由数字组成... 3 电话号码正则... 3 手机号码正则表达式... 4 使用正则表达式实现删除字符串中的空格:... 4 限制文本框只能输入数字和小数点等等... 5 替换小数点前内容为指定内容... 5 只匹配中文...

    MyFll Microsoft Visual FoxPro设计的扩展库

    NumConver 进制转换函数,能够将一个数字转换为2至36进制的字符串 ConverNum 将指定进制的字符串转换为数值型 GB2312ToBIG5 简体转繁体 BIG5ToGB2312 繁体转简体 FormToBmp 将表单保存为BMP图片 RectToBmp ...

Global site tag (gtag.js) - Google Analytics