根据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. 淘宝开放平台TOP SDK调用对接淘宝或天猫

    如果在淘宝/天猫上开了网店,用户自己也有一套自己的管理平台,这时可能会考虑和淘宝进行数据对接.这就需要考虑调用阿里提供的开发接口来推送和接收数据. 对接的方式有2种,一种是通过http接口,另外一种是 ...

  2. 汇编看C函数调用

    http://blog.csdn.net/wishfly/article/details/5022008   简单的函数调用,通过简单的函数调用反汇编可以清楚了解如下 1.栈到底是什么,如何操纵栈的? ...

  3. (四)HttpClient 使用代理 IP

    第一节: HttpClient 使用代理 IP 在爬取网页的时候,有的目标站点有反爬虫机制,对于频繁访问站点以及规则性访问站点的行为,会采集屏蔽IP措施. 这时候,代理IP就派上用场了. 关于代理IP ...

  4. Oracle学习笔记:parallel并行处理

    在使用oracel查询时,可以通过并行提高查询速度.例如: ) from table_name a; 强行启用并行度来执行当前SQL.加上这个说明之后,可以强行启用Oracle的多线程处理功能,提高效 ...

  5. C++之客户消费积分管理系统

    之前数据结构课程设计要求做这么一个小程序,现在贴上源码,来和大家进行交流学习,希望大家给出意见和建议 程序以链表为主要数据结构对客户信息进行存储,对身份证号码判断了位数及构成(前十七位为数字,最后一位 ...

  6. SQL之PROCEDURE(存储过程)

    先来看一小段代码 create procedure pr_bank(@bank_id int) as BEGIN select *from bank where bank_ID = @bank_id ...

  7. CCF CSP 201403-3 命令行选项

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-3 命令行选项 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些 ...

  8. LR检查点

    LR检查点   之前使用LoadRunner工具,一直认为,在开发脚本中检查点的设置是最容易的,直到现在,有一段时间没碰LR,今天录制了一段脚本,设置了文本检查点,回放脚本后,总是报错,描述一下我设置 ...

  9. 7-10 守卫棋盘 uva11214

    输入要给n*m的棋盘  均小于10   某些格子有标记  用最少的皇后  辐射到所有的标记 限时 6666ms 用IDA*    时间6000  尴尬. #include<bits/stdc++ ...

  10. C语言感悟

    还没接触C语言前,以为代码是一些单词组成的公式,和背单词一样的麻烦.枯燥无味,所以英语基础的很烂的我,对C语言没什么信心. 通过这一段时间的学习,现在对C语言的认识,和最开始时很大不一样.C语言中的代 ...