从JTextPane获取原始文本

时间:2009-12-07 12:27:09

标签: java swing 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转换为原始文本?

4 个答案:

答案 0 :(得分:16)

无需使用ParserCallback。只需使用:

textPane.getDocument().getText(0, textPane.getDocument().getLength()) );

答案 1 :(得分:5)

根据接受的答案:Removing HTML from a Java String

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定义的更多接口

答案 2 :(得分:2)

不幸的是,你需要自己做。想象一下,如果某些内容是HTML特定的,例如图像 - 文本表示不清楚。例如,是否包括alt文本。

答案 3 :(得分:2)

(允许使用RegExp吗?这不是解析,不是吗)

获取getText()结果并使用String.replaceAll()过滤所有标记。比trim()删除前导和尾随空格。对于你的第一个和最后一个'blabla'之间的空白,我没有看到一般的解决方案。也许你可以在CRLF周围洒掉其余部分并再次修剪所有字符串。

(我不是正则表达式专家 - 也许有人可以提供正则表达式并赢得一些声誉;)

修改

..我只是假设你没有在你的文字中使用<> - 否则它......说,这是一个挑战。