获取两个字符串中被代替的部分

获取两个字符串中被代替的部分

/**
 * 获取两个字符串中不同的部分
 * @param args
 */
 public void getDifferentword(String[] args) {
			//不同字符串
			StringBuffer diffSb = new StringBuffer();
			//相同字符串
			StringBuffer sameSb = new StringBuffer();
			String char1 ="我们就是哈哈哈噼里啪啦";
			String char2 ="我们就是*噼里*";

			char[] a = char1.toCharArray();
			char[] b = char2.toCharArray();

			// 不同字符Map
			Map<Object, Object> diffMap = new HashMap<Object, Object>();
			// 包含相同字符Map
			Map<Object, Object> sameMap = new HashMap<Object, Object>();
			if (char1.length() > char2.length()) {
				for (int i = 0; i < a.length; i++) {
					if (i == a.length - 1) {
						if (i > 1) {
							if (String.valueOf(b).contains(String.valueOf(a[i - 1]) + String.valueOf(a[i]))) {
								sameMap.put(i - 1, a[i - 1]);
								sameMap.put(i, a[i]);
							}else{
								diffMap.put(i, a[i]);
							}
						} else {
							sameMap.put(i, a[i]);
						}
					} else {
						if (String.valueOf(b).contains(String.valueOf(a[i]) + String.valueOf(a[i + 1]))) {
							if (i > 1) {
								if (String.valueOf(b).contains(String.valueOf(a[i - 1]) + String.valueOf(a[i]))) {
									sameMap.put(i - 1, a[i - 1]);
									sameMap.put(i, a[i]);
								}
							} else {
								sameMap.put(i, a[i]);
							}
						} else {
							if (i > 0) {
								if (String.valueOf(b).contains(String.valueOf(a[i - 1]) + String.valueOf(a[i]))) {
									sameMap.put(i - 1, a[i - 1]);
									sameMap.put(i, a[i]);
								} else {
									diffMap.put(i, a[i]);
								}
							} else {
								diffMap.put(i, a[i]);
							}
						}
					}
				}
			} else {
				for (int i = 0; i < b.length; i++) {
					if (i == b.length - 1) {
						if (i > 1) {
							if (String.valueOf(a).contains(String.valueOf(b[i - 1]) + String.valueOf(b[i]))) {
								sameMap.put(i - 1, b[i - 1]);
								sameMap.put(i, b[i]);
							}else{
								diffMap.put(i, b[i]);
							}
						} else {
							sameMap.put(i, b[i]);
						}
					} else {
						if (String.valueOf(a).contains(String.valueOf(b[i]) + String.valueOf(b[i + 1]))) {
							if (i > 1) {
								if (String.valueOf(a).contains(String.valueOf(b[i - 1]) + String.valueOf(b[i]))) {
									sameMap.put(i - 1, b[i - 1]);
									sameMap.put(i, b[i]);
								}
							} else {
								sameMap.put(i, b[i]);
							}
						} else {
							if (i > 0) {
								if (String.valueOf(a).contains(String.valueOf(b[i - 1]) + String.valueOf(b[i]))) {
									sameMap.put(i - 1, b[i - 1]);
									sameMap.put(i, b[i]);
								} else {
									diffMap.put(i, b[i]);
								}
							} else {
								diffMap.put(i, b[i]);
							}
						}
					}
				}
			}

			for (int i = 0; i < a.length; i++) {
				if (diffMap.get(i) != null) {
					diffSb.append(diffMap.get(i));
				}
				if(diffMap.get(i) != null&&diffMap.get(i+1) == null){
					diffSb.append(",");
				}
				if(diffMap.get(i) == null){
					sameSb.append(sameMap.get(i));
				}

			}
		    String[] sb = diffSb.toString().split(",");
			System.out.println("一共有"+sb.length+"处不同");
			System.out.println("不同的字符: "+diffSb.subSequence(0,diffSb.length()-1));
			System.out.println("相同的字符: "+sameSb);
		}

输出结果:
在这里插入图片描述
如果确定字符串1比字符串2长的话可以用以下简便算法:

 public String shieldWord(String[] args){
       //不同字符串
		StringBuffer diffSb = new StringBuffer();
		String char1 ="我们就是哈哈哈噼里啪啦";
		String char2 ="我们就是@噼里@";

		char[] a = char1.toCharArray();
		char[] b = char2.toCharArray();

		// 不同字符Map
		Map<Object, Object> diffMap = new HashMap<Object, Object>();
		int n = 0;
		for(int i=0;i<char1.length();i++){
			if(!String.valueOf(b[n]).contains(String.valueOf(a[i]))){
				if(String.valueOf(b[n+1]).contains(String.valueOf(a[i]))){
					n++;
				}else{
					diffMap.put(i,a[i]);
				}
			}else {
				n++;
			}
		}

		for (int i = 0; i < a.length; i++) {
			if (diffMap.get(i) != null) {
				diffSb.append(diffMap.get(i));
			}
			if(diffMap.get(i) != null&&diffMap.get(i+1) == null){
				diffSb.append(",");
			}

		}
	    String[] sb = diffSb.toString().split(",");
		System.out.println("一共有"+sb.length+"处不同");
		System.out.println("不同的字符: "+diffSb.substring(0,diffSb.length()-1));
	}

输出结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值