从JTextPane获取原始文本


问题内容

在我的应用程序中,我使用JTextPane来显示一些日志信息。因为我想突出显示文本中的某些特定行(例如错误消息),所以将设置contentType为“
text/html”。这样,我可以设置文本格式。

现在,我创建一个JButton,将其内容复制JTextPane到剪贴板中。这部分很简单,但是我的问题是,当我调用时myTextPane.getText(),我得到了HTML代码,例如:

<html>
  <head>

  </head>
  <body>
    blabla<br>
    <font color="#FFCC66"><b>foobar</b></font><br>
    blabla
  </body>
</html>

而不是只获取原始内容:

blabla
foobar
blabla

有没有办法只获取JTextPane纯文本格式的内容?还是我需要自己将HTML转换为原始文本?


问题答案:

基于以下问题的公认答案:从Java字符串中删除HTML

MyHtml2Text parser = new MyHtml2Text();
try {
    parser.parse(new StringReader(myTextPane.getText()));
} catch (IOException ee) {
  //handle exception
}
System.out.println(parser.getText());

Html2Text我链接到的答案上找到的课程的稍作修改的版本

import java.io.IOException;
import javax.swing.text.html.*;
import javax.swing.text.html.parser.*;

public class MyHtml2Text extends HTMLEditorKit.ParserCallback {
    StringBuffer s;
    public MyHtml2Text() {}
    public void parse(Reader in) throws IOException {
        s = new StringBuffer();
        ParserDelegator delegator = new ParserDelegator();
        delegator.parse(in, this, Boolean.TRUE);
    }
    public void handleText(char[] text, int pos) {
        s.append(text);
        s.append("\n");
    }
    public String getText() {
        return s.toString();
    }
}

如果您需要更细粒度的处理,请考虑实施更多由定义的接口HTMLEditorKit.ParserCallback