在我的应用程序中,我使用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转换为原始文本?
答案 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周围洒掉其余部分并再次修剪所有字符串。
(我不是正则表达式专家 - 也许有人可以提供正则表达式并赢得一些声誉;)
修改强>
..我只是假设你没有在你的文字中使用<
和>
- 否则它......说,这是一个挑战。