根据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. git —— 异常1,index.lock

    git提交过程中出现的问题 解决方法:找到 index.lock文件将其删除 一般 index.lock 在.git下面, 有时 .git 是隐藏的,但是无论怎样, 可以通过 everything 找 ...

  2. 洛谷P2341受欢迎的牛

    传送门啦 这是一个tarjan强连通分量与出度结合的例题. 先明确一下题意,如果这个点(缩点之后的)没有出度,这个点才能成为明星牛(明星牛的定义是:所有牛都喜欢他才可以). 由于我们进行了缩点,所以我 ...

  3. JMeter接口&性能测试

    JMeter接口测试 目前最新版本发展到5.0版本,需要Java7以上版本环境,下载解压目录后,进入\apache-jmeter-5.0\bin\,双击ApacheJMeter.jar文件启动JMem ...

  4. Merkle tree在区块链中的应用

    上篇博文我们转载了一篇<Merkle Tree(默克尔树)算法解析>,那么大家是不是会有疑问,学习这个算法之后,我们改怎么去应用,区块链中又是如何应用的?今天这篇博客就以Merkle tr ...

  5. R vs Python:载入包 import & library

    数据科学:R & Python 工作 & Kaggle机器学习比赛 可重复函数式编程 一.Python模块的载入 包 Package 模块 module import pandas a ...

  6. Java输出文件到本地(输出流)

    package cn.buaa; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; im ...

  7. C++有super关键字么?

    很多人在学习Java之后,看到Java里面有super关键字,用来表示父类,那么C++里面有super关键字么? 答案是否定的.这也很容易理解,C++由于支持多继承,所以假设存在super关键字,那么 ...

  8. 基于 Laravel 开发博客应用系列 —— 设置 Windows 本地开发环境

    1.安装原生PHP 下载/解压 PHP 到 PHP 下载页下载最新版本的 PHP(如果使用 Laravel 5.1 的话需要 PHP 5.5.9+ 版本),解压下载的zip格式压缩文件到本地目录,比如 ...

  9. java字符串解析

    java的虚拟机在内存中开辟出一块单独的区域,用来存储字符串对象,这款内存区域被称为字符串缓冲池. //创建字符串的时候先查找字符串缓冲池中没相同的对象,如果相同的对象就直接返回改对象的引用 //如果 ...

  10. Ext.example.msg()应用

    ①需要在开发包中包含文件夹example/shared中的example.js和example.css两个文件即可. ②在html文件中引入: <script src="../extj ...