根据java代码改写成js,下边js文件代码:

function StringBuffer() {
this.__strings__ = [];
};
StringBuffer.prototype.append = function (str) {
this.__strings__.push(str);
return this;
};
//格式化字符串
StringBuffer.prototype.appendFormat = function (str) {
for (var i = 1; i < arguments.length; i++) {
var parent = "\\{" + (i - 1) + "\\}";
var reg = new RegExp(parent, "g")
str = str.replace(reg, arguments[i]);
} this.__strings__.push(str);
return this;
}
StringBuffer.prototype.toString = function () {
return this.__strings__.join('');
};
StringBuffer.prototype.clear = function () {
this.__strings__ = [];
}
StringBuffer.prototype.size = function () {
return this.__strings__.length;
} /*
* 传入2个字符串进行相比高亮显示
* 例如
* 原数据一:王五张三
* 原数据二:张三李四
* <span style='color:blue'>王五</span>张三
* 张三<span style='color:blue'>李四</span> * 例如
* 原数据一:1000
* 原数据二:10012
* 100<span style='color:blue'>0</span>
* 100<span style='color:blue'>12</span>
html里下边调用 <script src="/Scripts/pages/getHighLightDifferent.js"></script>
<script>
$(document).ready(function () {
getHighLightDifferent("王五张三", "张三李四");
getHighLightDifferent("1000", "10012"); });
</script>
*/ var flag = 1; function getHighLightDifferent(a, b) {
//console.log("输入:" + a);
//console.log("输入:" + b); var temp = getDiffArray(a, b);
var a1 = getHighLight(a, temp[0]);
//console.log("输出:" + a1); var a2 = getHighLight(b, temp[1]);
//console.log("输出:" + a2);
//console.log(flag);
return new Array(a1,a2);
} function getHighLight(source, temp) {
var result = new StringBuffer();
var sourceChars = source.split("");
var tempChars = temp.split("");
var flag = false;
for (var i = 0; i < sourceChars.length; i++) {
if (tempChars[i] != ' ') {
if (i == 0) {
result.append("<span style='color:blue'>");
result.append(sourceChars[i]);
}
else if (flag) {
result.append(sourceChars[i]);
}
else {
result.append("<span style='color:blue'>");
result.append(sourceChars[i]);
}
flag = true;
if (i == sourceChars.length - 1) {
result.append("</span>");
}
}
else if (flag == true) {
result.append("</span>");
result.append(sourceChars[i]);
flag = false;
} else {
result.append(sourceChars[i]);
}
}
return result.toString();
} function getDiffArray(a, b) {
var result = new Array();
//选取长度较小的字符串用来穷举子串
if (a.length < b.length) {
var start = 0;
var end = a.length;
result = getDiff(a, b, start, end);
} else {
var start = 0;
var end = b.length;
result = getDiff(b, a, 0, b.length);
result = new Array(result[1], result[0]);
}
return result; } //将a的指定部分与b进行比较生成比对结果
function getDiff(a, b, start, end) {
var result = new Array(a, b);
var len = result[0].length;
while (len > 0) {
for (var i = start; i < end - len + 1; i++) {
var sub = result[0].substring(i, i + len);
var idx = -1;
if ((idx = result[1].indexOf(sub)) != -1) {
result[0] = setEmpty(result[0], i, i + len);
result[1] = setEmpty(result[1], idx, idx + len);
if (i > 0) {
//递归获取空白区域左边差异
result = getDiff(result[0], result[1], start, i);
}
if (i + len < end) {
//递归获取空白区域右边差异
result = getDiff(result[0], result[1], i + len, end);
}
len = 0;//退出while循环
break;
}
}
len = parseInt(len / 2);
//len = len - 1;
//console.log(len);
}
//console.log(result.join(""));
return result;
} //将字符串s指定的区域设置成空格
function setEmpty(s, start, end) {
var array = s.split("");
for (var i = start; i < end; i++) {
array[i] = ' ';
}
return array.join("");
}

下边html代码:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta charset="utf-8" />
<title>比较两个String字符串找出不同,并将不同处高亮显示</title>
<link href="bootstrap.min.css" rel="stylesheet" />
<style type="text/css">
textarea{
border:1; //可根据需要修改有无边框显示长度和宽带
overflow:auto;
height:100%;
width:100%
}
input{
border:1;
overflow:auto;
height:99%;
width:96%
}
</style>
<script src="jquery-1.10.2.min.js"></script>
<script src="getHighLightDifferent.js"></script>
</head>
<body>
<form>
<fieldset>
<div class="form-group">
<div class="col-sm-4">
<textarea rows="2" cols="20" type="text" id="inpLeft" name="inpLeft">——我们要坚持开放、绿色、廉洁理念,不搞封闭排他的小圈子,把绿色作为底色,推动绿色基础设施建设、绿色投资、绿色金融,保护好我们赖以生存的共同家园,坚持一切合作都在阳光下运作,共同以零容忍态度打击腐败。我们发起了《廉洁丝绸之路北京倡议》,愿同各方共建风清气正的丝绸之路。</textarea> </div>
<div class="col-sm-2">
<input id="inpStartCompare" type="button" value="开始比较" onclick="return startCompare();" />
</div>
<div class="col-sm-4">
<textarea rows="2" cols="20" type="text" id="inpRight" name="inpRight">——我们要秉持共商共建共享原则,倡导多边主义,大家的事大家商量着办,推动各方各施所长、各尽所能,通过双边合作、三方合作、多边合作等各种形式,把大家的优势和潜能充分发挥出来,聚沙成塔、积水成渊。</textarea>
</div>
</div>
</fieldset>
<br />
<div class="container">
<div id="show1" class="panel panel-primary"></div>
<div id="show2" class="panel panel-primary"></div>
</div>
</form>
</body>
<script>
$(document).ready(function () {
//$("#inpStartCompare").click(function () {
//return startCompare(); //});
});
function startCompare() {
var a = $.trim($("#inpLeft").val());
var b = $.trim($("#inpRight").val()); var result = getHighLightDifferent(a, b);
//getHighLightDifferent("1000", "10012"); $("#show1").html(result[0]);
$("#show2").html(result[1]);
return false;
}
</script>
</html>

测试:

* 传入2个字符串进行相比高亮显示
* 例如
* 原数据一:王五张三
* 原数据二:张三李四
* <span style='color:blue'>王五</span>张三
* 张三<span style='color:blue'>李四</span>

* 例如
* 原数据一:1000
* 原数据二:10012
* 100<span style='color:blue'>0</span>
* 100<span style='color:blue'>12</span>

js比较两个String字符串找出不同,并将不同处高亮显示的更多相关文章

  1. c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)

    c#封装DBHelper类   public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...

  2. JAVA中两个Set比较找出交集、差集、并集

    当做到某些功能的时候,使用Set能够快速方便地将需要的类型以集合类型保存在一个变量中,Set是最简单的一种集合,集合中的对象不按特定的方式排序,并且没有重复对象. //两个Set比较找出交集.差集.并 ...

  3. 转 A 、B两张表,找出ID字段中,存在A表,但是不存在B表的数据

    A.B两张表,找出ID字段中,存在A表,但是不存在B表的数据,A表总共13W数据,去重后大约3万条数据,B表有2W条数据,且B表的ID有索引. 方法一 使用not in,容易理解,效率低. selec ...

  4. js常会问的问题:找出字符串中出现次数最多的字符。

    一.循环obj let testStr = 'asdasddsfdsfadsfdghdadsdfdgdasd'; function getMax(str) { let obj = {}; for(le ...

  5. 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象

    本文需要对C#里的LINQ.Lambda 表达式 .委托有一定了解. 在工作中,经常遇到需要对比两个集合的场景,如: 页面集合数据修改,需要保存到数据库 全量同步上游数据到本系统数据库 在这些场景中, ...

  6. 第七天:JS内置对象-String字符串对象

    1.String对象  String对象用于处理已有的字符串 字符串可以使用双引号或单引号 String对象有一些常用的方法和属性,例如length 示例代码: <!DOCTYPE html&g ...

  7. JS中JSON和string字符串相互转换

    在Firefox,chrome,opera,safari,ie9,ie8等高级浏览器直接可以用JSON对象的stringify()和parse()方法. JSON.stringify(obj)将JSO ...

  8. Java字符串找出4个字节长度的字符

    不解释,直接上代码:  由于Iteye代码贴四个字节的UTF-8字符出错,特能图的方式发布几个特殊字符:  public class Byte4Check { public static void m ...

  9. shell之两个文档找出相同的之后在选

    for i in `cat t1` ; do echo "$i" | awk '{sub(/^ */,"");sub(/ *$/,"")}1 ...

随机推荐

  1. Python 安装requests模块

    window下安装: 注:不要使用 easy_install requests 命令 这种方式安装后不能卸载,建议使用pip 方法 1.自动安装 输入cmd命令进入命令行窗口,执行 pip insta ...

  2. Python基础 - eazy_install和pip源设置

    在国内一般推荐豆瓣的源,虽然工作中用到的都是公司内部的源,出于安全考虑这里就不拿公司的源举例了~ 1. pip源设置 打开~/.pip/pip.conf文件,若文件不存在则创建文件或者直接mkdir ...

  3. Tomcat 上传war包后 会自动部署

  4. Linux学习笔记:nohup & 后台任务

    在linux中,使用nohup xxx.sh &可以将前台任务变成后台任务执行,如果只使用&的话,在突然断网或者关闭启动终端时,内核会向后台任务发送sighup信号,从而导致后台任务停 ...

  5. Java读取本地文件(输入流)

    package cn.buaa; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; imp ...

  6. 20155309南皓芯2016-2017 2《Java程序设计》第一周学习总结

    关于java学习笔记的思考问题 第一章:JDK与JRE,JVM之间有没有必然的联系 第二章:可执行文件夹找到相关链接库 第三章:for与while循环的用法与比较,break与continue跳出的注 ...

  7. 易普优APS-3C行业解决方案助力国家智能制造示范车间实现高效计划排程

    一.      项目背景 广东劲胜智能集团国家智能制造专项——移动终端金属加工智能制造新模式项目是2015年国家94家智能制1.造专项之一.本项目实施车间为金属CNC加工车间(下称“智能制造示范车间” ...

  8. bzoj 1863 二分+dp check

    思路:二分之后用dp去check就好啦. #include<bits/stdc++.h> #define LL long long #define fi first #define se ...

  9. ref:下一个项目为什么要用 SLF4J

    ref:http://blog.mayongfa.cn/267.html 阿里巴巴 Java 开发手册 前几天阿里巴巴在云栖社区首次公开阿里官方Java代码规范标准,就是一个PDF手册,有命名规范,让 ...

  10. 有关FPGA

         在FPGA发展历史上,前后共有过超过50家厂商,在国外目前剩下不到10家,除赛灵思和ALTERA两家持续不断地军备竞赛,其它的都有着各自固守的市场定位.即使是有新进入者,例如受英特尔新工艺支 ...