多个分割点分割字符串
来源:互联网 发布:青岛网络电视台回放 编辑:程序博客网 时间:2024/06/05 05:35
题目:查找关键字为数组且与数组的顺序无关(变量):示例数组 String[] s = { "aba", "bab", "z", "q" };查找内容(变量): 示例字符 String str = "sababqczac";替换后的内容为:s<b>ababq</b>c<b>z</b>ac注:不止匹配一次import java.util.Arrays;import java.util.HashSet;import java.util.Set;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Test {/** * 思路:[1,3],[7,7],[5,5],[2,4] 把每个区间的两个数都保存在同一个数组里,然后排序 * 数组中不连续的位置就是分割点,例子中得到的数组是【1 2 3 4 5 5 7 7】 * 判断规则,如0不在数组,而1在数组中,所以0和1之间是个分割点,则在str[0]后面加上<b> * 5在数组中,6不在数组中,则5和6之间是个分割点,str[5]后面加上</b> * 添加count,奇数偶数统计判断是<b>还是</b>? * @param args */public static void main(String[] args) {String result = "";boolean flag = false; //标志第一位是否匹配到String[] s = { "aba", "bab", "z", "q"};String str = "sababqczazcqjhdzabas";int[] arr = new int[str.length()*str.length()]; //保存区间内两个数值int n = 0;//result 数组下标System.out.println("匹配区间如下:");for (int i = 0; i < s.length; i++) {if(str.indexOf(s[i]) == 0){ //记录第一位是否匹配到,因为数组长度不确定,定义数组多余的项为0flag = true;}int[] arrs = checkNum(s[i],str); //数组s的每一项匹配多次for (int j = 0; j < arrs.length; j++) {arr[n++] = arrs[j];arr[n++] = arrs[j] + s[i].length() - 1;for (int k = arrs[j]; k <= arrs[j] + s[i].length() - 1; k++) {arr[n++] = k;}System.out.print("[" + arrs[j] + "," + (arrs[j] + s[i].length() - 1) + "] ");}}System.out.println();arr = removeRe(arr,flag);//去重复Arrays.sort(arr); //排序System.out.print("区间组成数组:");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+" ");}System.out.println();int count = 1; //奇数<b>,偶数</b> for (int i = 0; i < str.length(); i++) { if(check(i,arr) && !check(i+1,arr)){if(count%2 == 0){result += str.charAt(i) + "</b>";}else{result += str.charAt(i) + "<b>";}count ++;}else if(check(i,arr) && check(i+1,arr)){result += str.charAt(i);}else if(!check(i,arr) && check(i+1,arr)){if(count%2 == 0){result += str.charAt(i) + "</b>";}else{result += str.charAt(i) + "<b>";}count ++;}else if(!check(i,arr) && !check(i+1,arr)){result += str.charAt(i);}} System.out.println("结果:" + result);}//去重复private static int[] removeRe(int[] arr,boolean flag) {Set<Integer> set = new HashSet<Integer>();for (int i = 0; i < arr.length-1; i++) {if(arr[i] !=0 ){set.add(arr[i]);}}Object[] obj = set.toArray();int[] arrs;if(flag){arrs = new int[set.size()+1];arrs[0] = 0;for (int i = 0; i < obj.length; i++) {arrs[i+1] = (Integer) obj[i];}}else{arrs = new int[set.size()];for (int i = 0; i < obj.length; i++) {arrs[i] = (Integer) obj[i];}}return arrs;} public static boolean check(int n, int[] arr){for (int i = 0; i < arr.length; i++) {if(arr[i] == n){return true;}}return false;}//正则表达式匹配多次public static int[] checkNum(String s, String str){int[] arr = new int[str.length()];int n = 0;Pattern pt = Pattern.compile(s);Matcher mt = pt.matcher(str);while (mt.find()) {arr[n++] = mt.start();}return removeRe(arr,false);}}
阅读全文
0 0
- 多个分割点分割字符串
- 分割字符串 strtok(多个字符分割)
- 字符串分割多个空格
- C# 字符串分割,包括分割多个字符
- JAVA split分割字符串,多个分割符
- 字符串分割多个空格(用正则)
- 字符串按照多个字符分割
- strtok分割字符串注意点
- iOS开发-- 字符串分割(多个字符分割一个字符串)、拼接
- c#把字符串分割为多个字符串
- C++字符串分割,分割符号可为任意字符,且可连续出现多个
- 分割字符串
- 分割字符串
- 分割字符串
- 分割字符串
- 分割字符串
- 字符串分割
- 字符串分割
- MyBatis代码生成
- 常用正则整理
- SSH整合
- vue之django 和vue语法冲突处理
- ERROR : Cannot parallelize an UPDATE statement that updates the distribution columns
- 多个分割点分割字符串
- 开发大型 web 项目时如何按需加载?
- 【TensorFlow】【数字货币】【单词记忆】【微信运营】【DIY电脑】 | Chat · 预告
- 高可用、高性能? 接口设计的 16 个原则
- C语言运行报glibc detected malloc corruption错误
- 一道数据结构题,求k阶逆序数
- ORA-00904: "T1_DESC": 标识符无效
- 搭建nginx-logstash-kafka-elasticsearch服务
- eclipse 环境搭建-scala