- 浏览: 65068 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
real_yqdt:
...
关于Java thread的Interrupt, isInterrupt, interrupted -
二当家的:
while需要写在try里面
关于Java thread的Interrupt, isInterrupt, interrupted -
sampras87:
mojunbin 写道
public void run() { ...
关于Java thread的Interrupt, isInterrupt, interrupted -
boaixiaohai:
mojunbin 写道
public void run() { ...
关于Java thread的Interrupt, isInterrupt, interrupted -
sp42:
学习了,谢谢!
巧妙的位运算及模运算
package processor; public class Data { private String content; private int[] formatArray; public String getContent() { return content; } public void setContent(String content) { this.content = content; } public int[] getFormatArray() { return formatArray; } private void setFormatArray(int[] formatArray) { this.formatArray = formatArray; } public void setFormat(int index, int format) { formatArray[index] = format; } public int getFormat(int index) { return formatArray[index]; } public static Data create(String contentString) { Data data = new Data(); data.setContent(contentString); data.setFormatArray(new int[contentString.length()]); return data; } }
package processor; public class DiffProcessor { private static DiffProcessor instance; public static DiffProcessor getInstance() { if (instance == null) { instance = new DiffProcessor(); } return instance; } public void process(Data data1, Data data2) { recursiveProcess(data1, 0, data1.getContent().length() - 1, data2, 0, data2.getContent().length() - 1); } private void copyArrayValue(int[] array1, int[] array2) { if (array1.length == array2.length) { for(int i = 0; i < array1.length; i++) { array1[i] = array2[i]; } } else { return; } } private int[] LCS(String str1, int str1BeginIndex, int str1EndIndex, String str2, int str2BeginIndex, int str2EndIndex) { int arrayX = str1EndIndex - str1BeginIndex + 1; int arrayY = str2EndIndex - str2BeginIndex + 1; int[][] LCSArray = new int[2][arrayY]; int maxValue = 0; int xMax = 0; int yMax = 0; for(int x = 0; x < arrayX; x++) { for(int y = 0; y < arrayY; y++) { if (str1.charAt(x + str1BeginIndex) == str2.charAt(y + str2BeginIndex)) { if (x > 0 && y > 0) { LCSArray[1][y] = LCSArray[0][y - 1] + 1; if (LCSArray[1][y] > maxValue) { maxValue = LCSArray[1][y]; xMax = x; yMax = y; } } else { LCSArray[1][y] = 1; } } else { LCSArray[1][y] = 0; } } copyArrayValue(LCSArray[0], LCSArray[1]); } return new int[] { maxValue, xMax, yMax }; } private void recursiveProcess(Data data1, int str1BeginIndex, int str1EndIndex, Data data2, int str2BeginIndex, int str2EndIndex) { int[] LCSResult = LCS(data1.getContent(), str1BeginIndex, str1EndIndex, data2.getContent(), str2BeginIndex, str2EndIndex); int maxValue = LCSResult[0]; int xMax = LCSResult[1]; int yMax = LCSResult[2]; if (maxValue != 0) { int xSamePartStartIndex = str1BeginIndex + xMax - maxValue + 1; int xSamePartEndIndex = xSamePartStartIndex + maxValue - 1; int ySamePartStartIndex = str2BeginIndex + yMax - maxValue + 1; int ySamePartEndIndex = ySamePartStartIndex + maxValue - 1; for(int i = xSamePartStartIndex; i <= xSamePartEndIndex; i++) { data1.setFormat(i, 0); } for(int i = ySamePartStartIndex; i <= ySamePartEndIndex; i++) { data2.setFormat(i, 0); } if (xSamePartStartIndex - str1BeginIndex <= 0) { for(int i = str2BeginIndex; i < ySamePartStartIndex; i++) { data2.setFormat(i, 1); } } else if (ySamePartStartIndex - str2BeginIndex <= 0) { for(int i = str1BeginIndex; i < xSamePartStartIndex; i++) { data1.setFormat(i, 1); } } else { recursiveProcess(data1, str1BeginIndex, xSamePartStartIndex - 1, data2, str2BeginIndex, ySamePartStartIndex - 1); } if (str1EndIndex - xSamePartEndIndex <= 0) { for(int i = ySamePartEndIndex + 1; i <= str2EndIndex; i++) { data2.setFormat(i, 1); } } else if (str2EndIndex - ySamePartEndIndex <= 0) { for(int i = xSamePartEndIndex + 1; i <= str1EndIndex; i++) { data1.setFormat(i, 1); } } else { recursiveProcess(data1, xSamePartEndIndex + 1, str1EndIndex, data2, ySamePartEndIndex + 1, str2EndIndex); } } else { for(int i = str1BeginIndex; i <= str1EndIndex; i++) { data1.setFormat(i, 1); } for(int i = str2BeginIndex; i <= str2EndIndex; i++) { data2.setFormat(i, 1); } return; } } }
package ui; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.dnd.DnDConstants; import java.awt.dnd.DropTarget; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.WindowConstants; import javax.swing.text.BadLocationException; import javax.swing.text.DefaultStyledDocument; import javax.swing.text.MutableAttributeSet; import javax.swing.text.SimpleAttributeSet; import javax.swing.text.StyleConstants; import processor.Data; import processor.DiffProcessor; public class DiffToolFrame extends JFrame { private MyJTextPane jTextPaneA; private MyJTextPane jTextPaneB; public DiffToolFrame() { VierMenuBar menuTest = new VierMenuBar(); CenterPanel centerPanel = new CenterPanel(); BottomPanel bottomPanel = new BottomPanel(); this.setJMenuBar(menuTest); Container c = this.getContentPane(); c.add(centerPanel, BorderLayout.CENTER); c.add(bottomPanel, BorderLayout.SOUTH); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); setSize(700, 500); setTitle("Diff Tool v1.0"); setLocation(200, 150); setVisible(true); this.addWindowListener(new WindowAdapter() { public void WindowClosing(WindowEvent e) { dispose(); System.exit(0); } }); } class VierMenuBar extends JMenuBar { private JDialog aboutDialog; public VierMenuBar() { JMenu fileMenu = new JMenu("File"); JMenuItem exitMenuItem = new JMenuItem("Exit", KeyEvent.VK_E); JMenuItem aboutMenuItem = new JMenuItem("About", KeyEvent.VK_A); this.add(fileMenu); fileMenu.add(exitMenuItem); fileMenu.add(aboutMenuItem); // about dialog Icon icon = new ImageIcon("smile.gif"); JLabel aboutLabel = new JLabel("<html><b><font size=5>" + "<center>Diff Tool" + "<br>v1.0", icon, JLabel.CENTER); aboutDialog = new JDialog(); aboutDialog.getContentPane().add(aboutLabel, BorderLayout.CENTER); aboutDialog.setSize(450, 225); aboutDialog.setLocation(300, 300); aboutDialog.setTitle("About"); aboutDialog.addWindowListener(new WindowAdapter() { public void WindowClosing(WindowEvent e) { dispose(); } }); exitMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { dispose(); System.exit(0); } }); aboutMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { aboutDialog.setVisible(true); } }); } } class CenterPanel extends JPanel { public CenterPanel() { jTextPaneA = new MyJTextPane(); jTextPaneB = new MyJTextPane(); JScrollPane jScrollPane1 = createJScrollPane(jTextPaneA); JScrollPane jScrollPane2 = createJScrollPane(jTextPaneB); JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, jScrollPane1, jScrollPane2); this.setLayout(new BorderLayout()); this.add(splitPane, BorderLayout.CENTER); this.setEnabled(true); } private JScrollPane createJScrollPane(MyJTextPane jTextPane) { jTextPane.setDocument(new DefaultStyledDocument()); new DropTarget(jTextPane, DnDConstants.ACTION_COPY_OR_MOVE, jTextPane); JScrollPane jScrollPane = new JScrollPane(); jScrollPane.setViewportView(jTextPane); return jScrollPane; } } class BottomPanel extends JPanel { public BottomPanel() { JButton compareButton = new JButton("Compare"); compareButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { DefaultStyledDocument docA = (DefaultStyledDocument) jTextPaneA.getDocument(); DefaultStyledDocument docB = (DefaultStyledDocument) jTextPaneB.getDocument(); try { Data data1 = Data.create(docA.getText(0, docA.getLength())); Data data2 = Data.create(docB.getText(0, docB.getLength())); DiffProcessor dp = DiffProcessor.getInstance(); dp.process(data1, data2); MutableAttributeSet diffAttr = new SimpleAttributeSet(); MutableAttributeSet defaultAttr = new SimpleAttributeSet(); StyleConstants.setForeground(diffAttr, Color.red); StyleConstants.setForeground(defaultAttr, Color.black); // set jTextPaneA for(int i = 0; i < data1.getFormatArray().length; i++) { if (data1.getFormat(i) == 1) { docA.setCharacterAttributes(i, 1, diffAttr, true); } else { docA.setCharacterAttributes(i, 1, defaultAttr, true); } } // set jTextPaneB for(int i = 0; i < data2.getFormatArray().length; i++) { if (data2.getFormat(i) == 1) { docB.setCharacterAttributes(i, 1, diffAttr, true); } else { docB.setCharacterAttributes(i, 1, defaultAttr, true); } } } catch (BadLocationException e1) { e1.printStackTrace(); } } }); this.setLayout(new BorderLayout()); this.add(compareButton, BorderLayout.CENTER); } } public static void main(String args[]) { new DiffToolFrame(); } }
package ui; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.dnd.DnDConstants; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; import java.awt.dnd.DropTargetEvent; import java.awt.dnd.DropTargetListener; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; import javax.swing.JTextPane; import javax.swing.text.BadLocationException; import javax.swing.text.DefaultStyledDocument; import javax.swing.text.Document; import util.MyUtil; public class MyJTextPane extends JTextPane implements DropTargetListener { public MyJTextPane() { super(); } @Override public void dragEnter(DropTargetDragEvent dtde) { } @Override public void dragExit(DropTargetEvent dte) { } @Override public void dragOver(DropTargetDragEvent dtde) { } @Override public void drop(DropTargetDropEvent dtde) { try { // clean JTextPane Document doc = this.getDocument(); try { doc.remove(0, doc.getLength()); } catch (BadLocationException e1) { e1.printStackTrace(); } Transferable tr = dtde.getTransferable(); if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); List list = (List) (dtde.getTransferable().getTransferData(DataFlavor.javaFileListFlavor)); Iterator iterator = list.iterator(); while(iterator.hasNext()) { File f = (File) iterator.next(); try { doc.insertString(0, MyUtil.readFile(f.getAbsolutePath()), null); } catch (BadLocationException e) { e.printStackTrace(); } } dtde.dropComplete(true); // this.updateUI(); } else { dtde.rejectDrop(); } } catch (IOException ioe) { ioe.printStackTrace(); } catch (UnsupportedFlavorException ufe) { ufe.printStackTrace(); } } @Override public void dropActionChanged(DropTargetDragEvent dtde) { } }
package util; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class MyUtil { public static String readFile(String filePath) throws IOException { BufferedReader br = new BufferedReader(new FileReader(filePath)); StringBuilder sb = new StringBuilder(); String line; while((line = br.readLine()) != null) { sb.append(line).append("\n"); } return sb.toString(); } public static void main(String[] args) { try { System.out.println(readFile("")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
发表评论
-
Ganymed Study
2012-07-19 00:54 8511. Website http://www.gany ... -
Netty Study
2012-05-07 19:04 785Let -
FilteredFilesGenerator
2012-01-02 20:58 0A tool to generate some fileted ... -
abc
2011-11-17 22:47 0姓名 性别 上次党费缴纳至 本次党费缴纳至 计算 月份 ... -
巧妙的位运算及模运算
2010-12-29 15:02 1866原帖:http://www.lgsee.com/?p= ... -
关于Java thread的Interrupt, isInterrupt, interrupted
2009-12-26 00:58 10230在《Java网络编程》上看到一个例子, 说是用thread.i ... -
在UltraEdit的查找和替换中使用正则表达式 (转)
2009-08-12 14:22 929转自http://baizheng.iteye.com/blo ... -
String相关算法
2009-08-10 00:38 1790最近在研究一些字符串的算法,准备做一个diff的小工具 首先第 ... -
Java Swing 组件全演示
2009-05-04 16:57 2300从http://www.hackhome.com/InfoVi ... -
java--swing在文本框显示某txt文件内容..
2009-05-04 16:53 6873从http://qzone.qq.com/blog/12082 ... -
动手实践制作双击运行jar包
2009-05-03 14:43 2287这几天帮大学同学的女朋友做了一个毕业设计 , 是一个什么什么库 ... -
JAR文件包及jar命令详解
2009-05-03 00:58 822引用JAR文件包及jar命令 ...
相关推荐
《difftool纯净版——深度解析与应用指南》 difftool是一款强大的文件及代码比较工具,主要用于在版本控制系统如Git中对比不同版本之间的差异。它以“纯净版”形式出现,意味着没有捆绑任何第三方软件,提供了一个...
标题中的“difftool_src.zip”表明这是一个包含源代码的压缩包,主要用于文件比较。从描述中我们可以了解到,这是用C++编程语言编写的,并且可以直接编译运行。标签“文件比较”和“c++”进一步确认了这个工具的主要...
**diff_tool工具详解** 在IT行业中,文件比较是日常工作中不可或缺的一部分,特别是在代码审查、版本控制和文本编辑等场景。`diff_tool`是一款强大的文件对比工具,它可以帮助用户快速识别和理解两个或多个文件之间...
#difftool diff模块比较和比较JSON和XML 用法 $ npm install difftool --save var difftool = require('difftool'); difftool.diff(lhs,rhs,schema, options, function(result) { } lhs和rhs是要比较的两个对象...
Git Difftool 在.gitconfig中配置的差异工具中打开当前项目或文件。 基本上,它在当前项目上运行git difftool 。 用法 从命令面板运行Git Difftool: Diff File差异Git Difftool: Diff File ,或使用⌥⌃D差异当前...
difftool 这是chrome devtool扩展,用于轻松查看DOM两个元素之间的样式差异。 当我不得不在前端工作时,经常会发现自己手动滚动浏览应用于两个元素的样式,试图找出要应用的不同样式。 该工具会自动执行此操作。 ...
基于Web的两列git difftool。 功能包括: 并排(两列)差异视图 在您选择的浏览器中的任何平台上运行。 通过Highlight.js突出显示语法 在单个差异中来回浏览多个文件 丰富的图像差异支持 安装 pip install ...
git-difftool 围绕“git diff”的 Python 包装器,方便查看更改 执照 在 Boost 软件许可下分发,版本 1.0。 (请参阅随附文件 LICENSE_1_0.txt 或复制到 ) 兼容性 需要 Git 1.7.2 或更高版本。 我在 cygwin 和 ...
**diffTool-CLI:文件夹内容与文件更改追踪利器** `diffTool-CLI` 是一个基于JavaScript开发的命令行界面(CLI)工具,专门用于跟踪和比较两个文件夹中的内容和文件之间的差异。在IT领域,这样的工具对于版本控制、...
External diff Tool是一个Eclipse插件,它允许启动外部diff工具进行文件比较,而不是默认的内置Eclipse diff工具。 该插件不会替代内置的Eclipse工具。 它仅将一个新的菜单项添加到GUI。
差分工具差分工具差分工具差分工具差分工具差分工具
例如,使用`git difftool`可以启动Beyond Compare比较工作区与暂存区、本地仓库之间的差异,而`git mergetool`则在合并冲突时发挥作用。在处理冲突时,Beyond Compare的界面清晰地展示了不同分支的内容,提供了多种...
difftool = true [diff] tool = dmp [difftool "dmp"] cmd = ~/path/to/dmp \"$LOCAL\" \"$REMOTE\" [alias] dd = difftool dc = difftool --cached sh = !"sh() { local c="$1"; c=${c:=HEAD}; git difftool ...
艾尔夫迪夫 一个简单的ELF文件差异工具! USAGE: elfdiff <ELF> FLAGS: -h, --help Prints help information -V, --version Prints version information ARGS: <ELF> First ELF <ELF> Second ELF ...
- 类似于difftool的配置过程,但主要用于解决合并冲突。 - 命令示例: - A: `git config --global merge.tool bcompare` - B: `git config --global merge.tool meld` - 使用`git mergetool`解决合并过程中产生...
独立于平台的PostgreSQL差异工具,可用于架构升级。 该工具比较两个架构转储文件,并创建可用于升级旧架构的输出文件。 项目资源和问题跟踪程序已移至https://github.com/fordfrog/apgdiff。
语言:English (United States) 免费的SEO差异工具 这使用户可以针对任何2个URL进行SEO元素的源代码和结构化比较。 这对于比较以下内容特别有用:*登台URL与生产URL –发行前测试*移动设备与台式机-*提取与呈现-查看...
diffsitter使用AST对文本文件执行diff来计算差异,而不是使用基于朴素的基于文本的差异。 这可以为您提供更多语义上有意义的差异信息,例如,这可以防止差异被格式差异污染。 diffstter使用 diffstter项目中的解析...
Create React App入门该项目是通过。可用脚本在项目目录中,可以运行:npm start 在开发模式下运行应用程序。 打开在浏览器中查看。 如果进行编辑,页面将重新加载。 您还将在控制台中看到任何棉绒错误。...
源代码差异工具。 改编自cvsweb,它使代码检查变得容易。 它还提供了另一个差异工具,您可以使用该工具递归比较两个文件或两个目录。 它是用perl编写的,并使用String :: Ediff进行比较。