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;
}
}
分享到:
相关推荐
执行这段代码后,返回的结果将是7,这是因为字符串中包含了7个由逗号分隔的子字符串。 #### 总结与扩展 本文介绍了一种通过SQL函数来计算字符串中子字符串数量的方法,这种方法不仅可以用来处理电子邮件地址,还...
4. **锚字符**:`^` 表示字符串的开始,`$` 表示字符串的结束,用于限制匹配的位置。 #### 五、实例分析 接下来通过几个具体的例子来进一步了解正则表达式的使用。 **例1:** 校验是否全由数字组成 ```javascript ...
5. **返回结果**:如果字符串完全匹配,则返回 `true`;否则返回 `false`。 #### 五、常见问题及解决方案 - **空字符串处理**:当传入的字符串为空 (`""`) 时,根据 `[0-9]*` 的定义,空字符串也会被视为“仅包含...
在标题“16进制字符串显示图片”中,所指的是一种将16进制字符串转换为图像的方法。这种技术通常应用于数据传输、存储或编码图像,尤其是当需要以文本形式表示图像数据时。16进制字符串实际上是图像原始像素数据的二...
本教程将详细讲解如何使用jQuery进行字符串验证,特别是手机号码验证和字母数字验证,以及涉及的正则表达式知识。 一、jQuery基础 jQuery是一个轻量级的JavaScript库,它简化了JavaScript的DOM操作、事件处理和动画...
- **截取字符串从开始到给定长度的一段**:使用`substring(int beginIndex, int endIndex)`方法。 - **判断字符串是否以某个前缀开头**:使用`startsWith(String prefix)`方法。 - **判断字符串是否以某个后缀结尾**...
为了能够覆盖到不同运营商的号码,我们需要针对不同运营商的号码段制定不同的正则表达式规则。 在上述给出的代码示例中,作者使用了多个正则表达式来区分不同运营商的手机号码。例如,中国移动的号码规则为以`134[0...
这个压缩包文件“安卓EditText输入框相关-EditText内容分不同块显示支持校验删除块添加块得到块代表的字符串集合.rar”显然是针对EditText的一个增强功能实现,它涉及到以下几个重要的知识点: 1. **多块显示**:...
在Android开发中,有时我们需要对用户输入的字符串进行智能处理,比如当用户在文本框中输入网址、邮箱地址或者电话号码时...在实际项目中,根据需求选择合适的方法进行字符串识别和链接化,可以大大提高应用的易用性。
3. **结果处理**:创建一个新的字符串数组用于存储无重复的元素,并通过循环将`Hashtable`中的键值复制到新数组中。 ### 二、比较两个字符串数组,返回不在第二个数组中的元素 #### 示例代码 ```java public ...
在Delphi编程环境中,正则表达式是一种强大的文本处理工具,用于匹配、查找、替换或提取符合特定模式的字符串。正则表达式引擎通常通过一个库或者内置函数提供,允许开发者编写灵活且复杂的字符串处理逻辑。在Delphi...
Python程序设计的基础语法中,字符串操作是一个至关重要的部分。字符串在Python中被视为不可变序列,这意味着一旦创建,就不能更改其内容。要截取字符串,我们可以使用切片(slicing)技术,这是一种灵活的方法来获取...
- `sub(pattern, repl, string)`:将字符串中所有匹配项替换为新的字符串。 ### 字符串与正则表达式的结合 在处理字符串时,正则表达式可以用来验证用户输入、提取有用信息、清洗数据等。例如,通过正则表达式可以...
7. 为了将分割后的字符串翻转,文章中提供了翻转字符串的代码段,但默认注释掉了。这部分可以通过再次使用两个for循环交换字符串中的字符位置来实现。 我们还注意到在代码示例中,字符串的拼接操作使用的是点号`.`...
**正则表达式**(Regular Expression)是一种强大的文本处理工具,它由一系列字符和特殊符号组成,用来匹配字符串中特定的组合。正则表达式可以用于多种任务,包括: 1. **验证**:检查字符串是否符合预设的格式或...
在这个例子中,原始字符串"1234567890"的中间4位将被替换为星号,所以$hidden_string的结果是"123****67890"。如果$type设为1,则结果为"1234567890",因为是从右边开始替换。 总结起来,这个`hideStr`函数提供了一...
java判断一段话中是否有电话号码,并将其进行隐藏
Linux 中截取字符串 cut 命令用法简介 Linux 中截取字符串 cut 命令是 Linux 系统中的一种常用命令,用于截取文本文件中的指定字符串。cut 命令可以根据不同的选项来截取不同的字符串,例如根据字符、字节、字段等...
在JavaScript中,有时我们需要处理包含前导零的字符串,例如电话号码、编号等,以便在显示时只保留有效的数字部分。本文将详细讲解如何使用正则表达式来去除字符串前面的所有零。 首先,让我们深入理解给出的正则...
用户只需输入或导入待合并的字符串列表,选择分隔符,即可得到符合格式的合并结果。这种方式不仅适用于手机号码,还可以用于其他类型的字符串,如邮箱地址、姓名等,方便进行大规模的信息处理。 2. 号码自动生成: ...