`
roway
  • 浏览: 50634 次
  • 性别: 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;
	}
}

分享到:
评论

相关推荐

    字符串分割的字符串数量 SQL

    执行这段代码后,返回的结果将是7,这是因为字符串中包含了7个由逗号分隔的子字符串。 #### 总结与扩展 本文介绍了一种通过SQL函数来计算字符串中子字符串数量的方法,这种方法不仅可以用来处理电子邮件地址,还...

    nodejs+字符串的模式匹配+正则表达式+判断获取字符串的某些需求

    4. **锚字符**:`^` 表示字符串的开始,`$` 表示字符串的结束,用于限制匹配的位置。 #### 五、实例分析 接下来通过几个具体的例子来进一步了解正则表达式的使用。 **例1:** 校验是否全由数字组成 ```javascript ...

    判断字符串是否只有数字

    5. **返回结果**:如果字符串完全匹配,则返回 `true`;否则返回 `false`。 #### 五、常见问题及解决方案 - **空字符串处理**:当传入的字符串为空 (`""`) 时,根据 `[0-9]*` 的定义,空字符串也会被视为“仅包含...

    16进制字符串显示图片

    在标题“16进制字符串显示图片”中,所指的是一种将16进制字符串转换为图像的方法。这种技术通常应用于数据传输、存储或编码图像,尤其是当需要以文本形式表示图像数据时。16进制字符串实际上是图像原始像素数据的二...

    jquery input字符串验证(手机号码验证、字母数字验证) 带示列

    本教程将详细讲解如何使用jQuery进行字符串验证,特别是手机号码验证和字母数字验证,以及涉及的正则表达式知识。 一、jQuery基础 jQuery是一个轻量级的JavaScript库,它简化了JavaScript的DOM操作、事件处理和动画...

    Java字符串常用方法

    - **截取字符串从开始到给定长度的一段**:使用`substring(int beginIndex, int endIndex)`方法。 - **判断字符串是否以某个前缀开头**:使用`startsWith(String prefix)`方法。 - **判断字符串是否以某个后缀结尾**...

    PHP提取字符串中的手机号正则表达式怎么写

    为了能够覆盖到不同运营商的号码,我们需要针对不同运营商的号码段制定不同的正则表达式规则。 在上述给出的代码示例中,作者使用了多个正则表达式来区分不同运营商的手机号码。例如,中国移动的号码规则为以`134[0...

    安卓EditText输入框相关-EditText内容分不同块显示支持校验删除块添加块得到块代表的字符串集合.rar

    这个压缩包文件“安卓EditText输入框相关-EditText内容分不同块显示支持校验删除块添加块得到块代表的字符串集合.rar”显然是针对EditText的一个增强功能实现,它涉及到以下几个重要的知识点: 1. **多块显示**:...

    android自动识别输入的字符串

    在Android开发中,有时我们需要对用户输入的字符串进行智能处理,比如当用户在文本框中输入网址、邮箱地址或者电话号码时...在实际项目中,根据需求选择合适的方法进行字符串识别和链接化,可以大大提高应用的易用性。

    java 字符串的过滤 方法 代码

    3. **结果处理**:创建一个新的字符串数组用于存储无重复的元素,并通过循环将`Hashtable`中的键值复制到新数组中。 ### 二、比较两个字符串数组,返回不在第二个数组中的元素 #### 示例代码 ```java public ...

    Delphi字符串正则表达式

    在Delphi编程环境中,正则表达式是一种强大的文本处理工具,用于匹配、查找、替换或提取符合特定模式的字符串。正则表达式引擎通常通过一个库或者内置函数提供,允许开发者编写灵活且复杂的字符串处理逻辑。在Delphi...

    Python程序设计基础语法-截取字符串.pptx

    Python程序设计的基础语法中,字符串操作是一个至关重要的部分。字符串在Python中被视为不可变序列,这意味着一旦创建,就不能更改其内容。要截取字符串,我们可以使用切片(slicing)技术,这是一种灵活的方法来获取...

    Python基础入门教程 由浅入深讲解清晰 第4章 字符串与正则表达式 (共55页).ppt

    - `sub(pattern, repl, string)`:将字符串中所有匹配项替换为新的字符串。 ### 字符串与正则表达式的结合 在处理字符串时,正则表达式可以用来验证用户输入、提取有用信息、清洗数据等。例如,通过正则表达式可以...

    php实现将字符串按照指定距离进行分割的方法

    7. 为了将分割后的字符串翻转,文章中提供了翻转字符串的代码段,但默认注释掉了。这部分可以通过再次使用两个for循环交换字符串中的字符位置来实现。 我们还注意到在代码示例中,字符串的拼接操作使用的是点号`.`...

    正则表达式通常用于两种任务:1.验证,2.搜索/替换。用于验证时,通常需要在前后分别加上^和$,以匹配整个待验证字符串

    **正则表达式**(Regular Expression)是一种强大的文本处理工具,它由一系列字符和特殊符号组成,用来匹配字符串中特定的组合。正则表达式可以用于多种任务,包括: 1. **验证**:检查字符串是否符合预设的格式或...

    PHP中将一个字符串部分字符用星号*替代隐藏的实现代码

    在这个例子中,原始字符串"1234567890"的中间4位将被替换为星号,所以$hidden_string的结果是"123****67890"。如果$type设为1,则结果为"1234567890",因为是从右边开始替换。 总结起来,这个`hideStr`函数提供了一...

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

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

    linux中截取字符串cut命令用法简介参考.pdf

    Linux 中截取字符串 cut 命令用法简介 Linux 中截取字符串 cut 命令是 Linux 系统中的一种常用命令,用于截取文本文件中的指定字符串。cut 命令可以根据不同的选项来截取不同的字符串,例如根据字符、字节、字段等...

    javascript使用正则实现去掉字符串前面的所有0

    在JavaScript中,有时我们需要处理包含前导零的字符串,例如电话号码、编号等,以便在显示时只保留有效的数字部分。本文将详细讲解如何使用正则表达式来去除字符串前面的所有零。 首先,让我们深入理解给出的正则...

    字符批量合并及号码自动生成工具

    用户只需输入或导入待合并的字符串列表,选择分隔符,即可得到符合格式的合并结果。这种方式不仅适用于手机号码,还可以用于其他类型的字符串,如邮箱地址、姓名等,方便进行大规模的信息处理。 2. 号码自动生成: ...

Global site tag (gtag.js) - Google Analytics