获取两个字符串中被代替的部分
/**
* 获取两个字符串中不同的部分
* @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));
}
输出结果: