8

私のアプリケーションでは、JTextPaneログ情報を表示するために を使用しています。このテキストの特定の行 (エラー メッセージなど) を強調したいので、contentTypeを " text/html" に設定します。このようにして、テキストをフォーマットできます。

JTextPaneここで、このコンテンツをクリップボードにコピーする JButton を作成します。その部分は簡単ですが、私の問題は、 を呼び出すと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

4 に答える 4

18

ParserCallback を使用する必要はありません。使用するだけです:

textPane.getDocument().getText(0, textPane.getDocument().getLength()) );
于 2009-12-07T16:59:24.843 に答える
5

受け入れられた回答に基づく: 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

于 2009-12-07T13:27:32.260 に答える
2

残念ながら、自分で行う必要があります。一部のコンテンツがHTML固有である場合、たとえば画像を想像してみてください。テキスト表現が不明確です。たとえば、代替テキストを含めるかどうか。

于 2009-12-07T12:33:34.973 に答える
2

(正規表現は許可されていますか?これは解析ではありませんね)

getText()の結果を取得し、String.replaceAll()を使用してすべてのタグをフィルタリングします。先頭と末尾の空白を削除するtrim()より。最初と最後の「blabla」の間の空白については、一般的な解決策はわかりません。たぶん、残りをCRLFの周りにこぼして、すべてのストリングを再度トリミングすることができます。

(私は正規表現の専門家ではありません-誰かが正規表現を提供して評判を得ることができるかもしれません;))

編集

<..私はあなたがあなたのテキストでそしてあなたのテキストで使用しないと仮定し>ました-そうでなければそれは..言う、それは挑戦です。

于 2009-12-07T12:36:36.620 に答える