Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
突出显示Java中的更改_Java_Eclipse_String_For Loop - Fatal编程技术网

突出显示Java中的更改

突出显示Java中的更改,java,eclipse,string,for-loop,Java,Eclipse,String,For Loop,基本上,我已经完成了我的程序,它将显示字符串中的差异,并显示整个行。我想(用一种颜色)突出这一行中的差异 例如: Original at line 5 <rect x="60.01" width="855.38" id="rect_1" y="-244.35" height="641.13" style="stroke-width: 1; stroke: rgb(0, 0, 0); fill: none; "/> Edited at line 5 <rect x=

基本上,我已经完成了我的程序,它将显示字符串中的差异,并显示整个行。我想(用一种颜色)突出这一行中的差异

例如:

Original at line 5
   <rect x="60.01" width="855.38" id="rect_1" y="-244.35" height="641.13" style="stroke-width: 1; stroke: rgb(0, 0, 0); fill: none; "/>

Edited at line 5
   <rect x="298.43" width="340.00" y="131.12" height="380.00" id="rect_1" style="stroke-width: 1; stroke: rgb(0, 0, 0); fill: rgb(255, 102, 0); "/>

这将显示两整行内容,如前面的示例(原始版本和编辑版本)。我希望能够突出显示实际所做的更改,Java中是否有这样做的方法?

您试图重写WinDiff和Beyond Compare等常用工具的特殊原因?
如果您确实需要它:
主要困难在于找到差异停止的地方

你认为有什么不同? 1) 改变“x”和“宽度”的值很容易——它们的顺序相同
2) 你认为“id”发生了什么?它的价值是什么?您想如何突出显示它

假设您总是知道哪个是“原始的”

我建议您扫描“原始”字符串,标记它,分别匹配每个标记并删除匹配的标记。当您用完所有“原始”标记后,您开始突出显示“原始”和“编辑”的其余部分的差异。

Diff match patch是Java中可用的库,允许您生成类似于Diff viewer的html。也许对你有帮助

要回答您提出的问题,这取决于您显示全文的方式。我可以想出两种方法,我相信还有其他方法

  • 最简单的方法是使用println()将文件写入System.out。这将把文件内容转储到Eclipse控制台。要突出显示某个内容,请将该行写入System.err而不是System.out,从而使该行以红色写入控制台。这为您提供了突出显示更改的最简单方法,但它是在行级别,而不是角色级别
  • 除此之外,在编写Eclipse中的比较工具之类的工具时,事情会变得非常复杂。一旦确定发生了什么变化(我认为这超出了这个问题的范围),就可以使用一些小部件构建工具UI来显示这些变化。其中一个小部件是StyledText小部件,它是一个文本小部件,让您可以在文本范围的基础上控制颜色、字体和其他文本属性

  • 我找到了一个更简单的方法来做这件事。我已将每一行保存到一个字符串数组中(拆分每个元素/参数),按字母顺序排列字符串,然后比较字符串。列出已更改的

    resultsBuff.append("\nEdited at line " + delta.getRevised().getPosition() + "\n");
                for (Object line : delta.getRevised().getLines())
                    {
    
                    String xmlLineEdit = line.toString();//save 'original' xml line into string
    
                XMLInputFactory xif = XMLInputFactory.newFactory();   
                XMLStreamReader xsr = xif.createXMLStreamReader(new StringReader(xmlLineEdit));//put xml into parser
    
                xsr.nextTag(); // Advance to svg element
                int attributeCount = xsr.getAttributeCount();//get the number of attributes
                array1 = new String[attributeCount];
                for(int x=0; x<attributeCount; x++) //for each attribute
                   {
                //StringBuilder stringBuilder = new StringBuilder();//might remove
                array1[x]= xsr.getAttributeLocalName(x) + "=\"" + xsr.getAttributeValue(x) + "\"";//add attributes and values to an array
                   }
    
                Arrays.sort(array1);//sort the array alphabetically
    
    resultsBuff.append(“\nEdited在第行”+delta.getRevised().getPosition()+”\n”);
    对于(对象行:delta.getRevied().getLines())
    {
    字符串xmlLineEdit=line.toString();//将“原始”xml行保存到字符串中
    XMLInputFactory xif=XMLInputFactory.newFactory();
    XMLStreamReader xsr=xif.createXMLStreamReader(新StringReader(xmlLineEdit));//将xml放入解析器
    xsr.nextTag();//前进到svg元素
    int attributeCount=xsr.getAttributeCount();//获取属性数
    array1=新字符串[attributeCount];
    
    对于(int x=0;席想强调实际发生的变化),无论如何,有没有能力做到这一点?这里有太多的人花太多时间批评人们的问题而不是实际上帮助别人。这个“颜色”是什么?是在web应用程序中吗?桌面富客户端GUI?命令行界面?万花筒?@AndrewThompson web应用程序。任何颜色。这里有太多人花太多时间批评别人的问题,而不是实际帮助别人太多的人脱口而出形式糟糕的问题描述,希望我们能凭直觉回答问题,而不是思考如何提问。你的问题太模糊了。我们需要一个简洁、可解决的问题。只是举手说:“我是怎么做到的?!”这是一个很弱的尝试。当有很多人做了更多的家庭作业时,我们为什么要花时间哄骗你的问题?“的价值”是我想强调的。这似乎是个好主意,谢谢!对不起,你说的“价值”是什么意思?“原创”中的“60.01”和“编辑”中的“298.43”一旦你完成了匹配的令牌,你就可以更精确地比较它们,也就是说,当发现困难在哪里找到变化——在未格式化的数据上几乎是不可能的。考虑“原始”:<代码> ID1=“1”ID2=“2”< /代码>和“编辑”:<代码> ID2=“1”ID1=“2”< /代码>是“60.01”。可能是个问题,因为我不知道为什么它有时会吐出未格式化的字符串:S!有时我只是想知道这里的一些人为什么会将某人的答案标记为“无用/无用”?他们如何决定哪些有用,哪些不有用?我不担心,这个网站有50%的人都有某种傲慢和态度问题,因为他们认为自己比你好。这与我建议的方法有什么不同?我问的是比较顺序-在你的特定字符串中,attri的顺序但是可能并不重要,但是如果你使用(正如你应该使用的)相同的代码用于比较一般文本和/或源代码令牌的顺序变得很重要:
    x++;y=x;
    产生与
    y=x;x++;
    完全不同的结果。因此,在函数中添加一个参数,允许您忽略或考虑令牌的顺序是有意义的。
    resultsBuff.append("\nEdited at line " + delta.getRevised().getPosition() + "\n");
                for (Object line : delta.getRevised().getLines())
                    {
    
                    String xmlLineEdit = line.toString();//save 'original' xml line into string
    
                XMLInputFactory xif = XMLInputFactory.newFactory();   
                XMLStreamReader xsr = xif.createXMLStreamReader(new StringReader(xmlLineEdit));//put xml into parser
    
                xsr.nextTag(); // Advance to svg element
                int attributeCount = xsr.getAttributeCount();//get the number of attributes
                array1 = new String[attributeCount];
                for(int x=0; x<attributeCount; x++) //for each attribute
                   {
                //StringBuilder stringBuilder = new StringBuilder();//might remove
                array1[x]= xsr.getAttributeLocalName(x) + "=\"" + xsr.getAttributeValue(x) + "\"";//add attributes and values to an array
                   }
    
                Arrays.sort(array1);//sort the array alphabetically