从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