从JTextPane获取原始文本

Rom*_*las 7 java swing jtextpane

在我的应用程序中,我使用a 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>
Run Code Online (Sandbox Code Playgroud)

而不是只获取原始内容:

blabla
foobar
blabla
Run Code Online (Sandbox Code Playgroud)

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

cam*_*ckr 17

无需使用ParserCallback.只需使用:

textPane.getDocument().getText(0, textPane.getDocument().getLength()) );
Run Code Online (Sandbox Code Playgroud)


jit*_*ter 5

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

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

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您需要更精细的处理,请考虑实现更多定义的接口 HTMLEditorKit.ParserCallback