Снаружи класса определения, как @Telos упоминания, можно только использовать EventHandler на левой стороне +=
или -=
. Так, если у Вас есть способность изменить класс определения, Вы могли бы предоставить метод для выполнения проверки путем проверки, ли обработчик событий null
- если так, то никакой обработчик событий не был добавлен. В противном случае тогда, возможно, и можно циклично выполниться через значения в Делегат. GetInvocationList. Если Вы равны делегату, которого Вы хотите добавить как обработчик событий, то Вы знаете, что это там.
public bool IsEventHandlerRegistered(Delegate prospectiveHandler)
{
if ( this.EventHandler != null )
{
foreach ( Delegate existingHandler in this.EventHandler.GetInvocationList() )
{
if ( existingHandler == prospectiveHandler )
{
return true;
}
}
}
return false;
}
И это могло легко быть изменено для становления, "добавьте обработчик, если это не там". Если у Вас нет доступа к внутренностям класса, это представляет событие, Вы, возможно, должны исследовать -=
и +=
, как предложил @Lou Franco.
Однако можно быть более обеспеченным повторным исследованием путем, Вы уполномочиваете и списываете эти объекты, чтобы видеть, не можете ли Вы найти способ отследить эту информацию сами.
На основе принятого ответа на: Удаление HTML из строки Java
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
К сожалению, придется делать это самому. Представьте, что какое-то содержимое было специфичным для HTML, например изображения - текстовое представление нечеткое. Включать альтернативный текст или нет, например.
Нет необходимости использовать ParserCallback. Просто используйте:
textPane.getDocument().getText(0, textPane.getDocument().getLength()) );
(Разрешено ли RegExp? Это не синтаксический анализ, не так ли)
Возьмите результат getText () и используйте String.replaceAll () для фильтрации всех тегов. Чем trim (), чтобы удалить начальные и конечные пробелы. Для пробелов между вашим первым и последним «blabla» я не вижу общего решения. Может быть, вы можете пролить остальное вокруг CRLF и снова обрезать все строки.
(Я не эксперт по регулярным выражениям - может быть, кто-то сможет предоставить регулярное выражение и заработать некоторую репутацию;))
Изменить
.. Я просто предположил что вы не используете <
и >
в своем тексте - иначе это .. скажем, это проблема.