1.最终效果:
2.逻辑代码:
// 比较两个字符串, 字符串长度可以不等, 其中之一可以为空
public void compare() {
// 自定义一个ChangeRecord对象, 里面可以只有befChange, aftChange两个属性
ChangeRecord record = new ChangeRecord();
String befChange = record.getBefChange();
String aftChange = record.getAftChange();
if (!StringUtils.isEmpty(befChange) && StringUtils.isEmpty(aftChange)) {
// 变更前不为空, 变更后为空
String befResult = CompareUtils.addColorTag(befChange);
record.setBefChange(befResult);
LOGGER.info("befResult: {}, aftChange is empty.", befResult);
} else if (StringUtils.isEmpty(befChange) && !StringUtils.isEmpty(aftChange)) {
// 变更前为空, 变更后不为空
String aftResult = CompareUtils.addColorTag(aftChange);
record.setAftChange(aftResult);
LOGGER.info("befChange is empty., aftResult is {}.", aftResult);
} else {
// 都不为空
List<String> taggedList = CompareUtils.compareStrAndTagged(befChange, aftChange);
record.setBefChange(taggedList.get(0));
record.setAftChange(taggedList.get(1));
}
LOGGER.info(record.getBefChange());
LOGGER.info(record.getAftChange());
}
3.比较工具类:
/**
* 字符串比较工具类, 生成颜色标签
*/
public class CompareUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(CompareUtils.class);
// 长字符串向短字符串比
public static List<String> compareStrAndTagged(String str1, String str2) {
StringBuilder diffStr1 = new StringBuilder();
StringBuilder diffStr2 = new StringBuilder();
int maxLength = Math.max(str1.length(), str2.length());
for (int i = 0; i < maxLength; i++) {
if (i < str1.length() && i < str2.length()) {
if (str1.charAt(i) == str2.charAt(i)) {
diffStr1.append(str1.charAt(i));
diffStr2.append(str2.charAt(i));
} else {
diffStr1.append("<span style=\"color: red;\">");
diffStr2.append("<span style=\"color: red;\">");
diffStr1.append(str1.charAt(i));
diffStr2.append(str2.charAt(i));
diffStr1.append("</span>");
diffStr2.append("</span>");
}
} else if (i < str1.length()) {
diffStr1.append("<span style=\"color: red;\">");
diffStr1.append(str1.charAt(i));
diffStr1.append("</span>");
} else if (i < str2.length()) {
diffStr2.append("<span style=\"color: red;\">");
diffStr2.append(str2.charAt(i));
diffStr2.append("</span>");
}
}
List<String> outputList = new ArrayList<>();
outputList.add(diffStr1.toString());
outputList.add(diffStr2.toString());
LOGGER.info("outputList: {}", outputList);
return outputList;
}
// 直接在字符串前后添加
public static String addColorTag(String str) {
String preColor = "<span style=\"color: red;\">";
String sufColor = "</span>";
return preColor + str + sufColor;
}
}
ps:
最后生成的字符串包含html标签, 可以放在html文件中显示