gpt4 book ai didi

java - JTextPane 和正则表达式的问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:03:15 32 4
gpt4 key购买 nike

我有一个包含一串 XML 字符的 JTextPane,我想改变 XML 开始标签的颜色;为此,我使用正则表达式查找开始标记,然后将相关文本索引的字符属性设置为所选颜色。这可以在下面的代码中看到:

import java.awt.*;
import java.util.regex.*;
import javax.swing.*;
import javax.swing.text.*;

public class Test {
String nLine = java.lang.System.getProperty("line.separator");
String xmlString = "<ROOT>" + nLine + " <TAG>Tag Content</TAG>" + nLine + " <TAG>Tag Content</TAG>" + nLine + " <TAG>Tag Content</TAG>" + nLine + "</ROOT>";

public Test(){
JTextPane XMLTextPane = new XMLTextPane();
JScrollPane pane = new JScrollPane(XMLTextPane);
pane.setPreferredSize(new Dimension(500,100));
JOptionPane.showConfirmDialog(null, pane);
}

class XMLTextPane extends JTextPane{
public XMLTextPane(){
super.setText(xmlString);
StyleContext context = new StyleContext();
Style openTagStyle = context.addStyle("Open Tag", null);
openTagStyle.addAttribute(StyleConstants.Foreground, Color.BLUE);
StyledDocument sdocument = this.getStyledDocument();

Pattern pattern = Pattern.compile("<([a-z]|[A-Z])+");
Matcher matcher = pattern.matcher(super.getText());
while (matcher.find()) {
sdocument.setCharacterAttributes(matcher.start(), matcher.group().length() , openTagStyle, true);
}
}
}

public static void main(String[] args){
new Test();
}
}

然而,问题是 Matcher.start()StyledDocument.setCharacterAttributes() 似乎以不同方式递增(似乎 StyledDocument忽略换行符),从而导致彩色文本交错。

enter image description here

问题不在于正则表达式本身,因为 while 循环中的 System.out.println(matcher.group()); 显示以下正确输出:

<ROOT
<TAG
<TAG
<TAG

有没有办法强制 Matcher.start()StyledDocument.setCharacterAttributes() 持续递增,或者我必须实现一个新的行计数器?

编辑:正如 Schlagi 所建议的那样,将所有 \r\n 替换为 \n 确实 有效,但是我担心这会使代码有点困惑且难以维护。欢迎提出其他建议!

最佳答案

我不知道为什么 JTextPane 做错了。可能是,在样式文档中,"\r\n" 只是一个字符。不要问为什么。

换行时

String nLine = java.lang.System.getProperty("line.separator"); 

String nLine = "\n";

它有效。JTextPane 在每个操作系统上只需要一个 "\n" 作为换行符

关于java - JTextPane 和正则表达式的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25891006/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com