如何从Javafx2 HTMLEditor中获取纯文本

3

我有一个HTML编辑器,我已经输入了"My Simple Text"。

 @FXML
 public HTMLEditor htmlEditor;

when say

htmlEditor.getHtmlText();

这是返回结果

<html><head></head><body contenteditable="true"><p style="text-align: left;"><font face="'Segoe UI'">My Simple Text</font></p></body></html>

但是我想要没有HTML标签的文本,即:
My Simple Text

how can i do it?

@UlukBiy 其实这是一个GUI要求,但在后端我只需要简单的文本字符串,所以我不能使用TextArea。 - java baba
4个回答

4

2

使用 getHtmlText() 在您的HtmlEditor上应用后,将生成的html代码字符串传递给以下方法:

public static String getText(String htmlText) {

  String result = "";

  Pattern pattern = Pattern.compile("<[^>]*>");
  Matcher matcher = pattern.matcher(htmlText);
  final StringBuffer text = new StringBuffer(htmlText.length());

  while (matcher.find()) {
    matcher.appendReplacement(
      text,
      " ");
  }

  matcher.appendTail(text);

  result = text.toString().trim();  

  return result;
}

1
你应该从这个HTMLEditor获取的Html文本中删除所有的html标签。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.scene.web.HTMLEditor;
import javafx.stage.Stage;


public class HTMLEditorDemo extends Application {

    @Override
    public void start(Stage primaryStage) {

        HTMLEditor editor = new HTMLEditor();
        Button b = new Button("Show Text");
        b.setOnAction((ActionEvent e) -> {
            String htmlText = editor.getHtmlText();
            stripHTMLTags(htmlText);

        });

        VBox vBox = new VBox(b, editor);
        Scene scene = new Scene(vBox, 800, 600);


        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

    private void stripHTMLTags(String htmlText) {

        Pattern pattern = Pattern.compile("<[^>]*>");
        Matcher matcher = pattern.matcher(htmlText);
        final StringBuffer sb = new StringBuffer(htmlText.length());
        while(matcher.find()) {
            matcher.appendReplacement(sb, " ");
        }
        matcher.appendTail(sb);
        System.out.println(sb.toString().trim());

    }

}

帕特里克


@Patrick... 基本上用户可以输入任何内容。所以这不是一个好主意。 - java baba
@javababa,所以您需要用户在编辑器中输入的纯文本吗? - Patrick

0

试试这个

 WebView webView = (WebView) htmlEditor.lookup("WebView");
    ((HTMLBodyElementImpl) ((NodeListImpl) webView.getEngine().getDocument().getElementsByTagName("body")).item(0)).getTextContent();

你也可以设置为内容文本或聚焦于 Webview。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接