JAVA 如何在没有 HTML 标签的情况下从自定义 JLabel 中检索文本内容?

JAVA How to retrieve text content from custom JLabel without the HTML taggings?

如何在没有 HTML 标记的情况下从 JLabel 检索文本?

例如

CustomJLabel:

public CustomJLabel extends JLabel(){
       private String text;
    public CustomJLabel(String text) {
        super("<html><div style='text-align: center;'>"+text+"</div></html>"),
        this.text=text;
    }
}

主要方法:

testCustomLbl = new CustomJLabel("Testing");
System.out.println(testCustomLbl.getText());

我得到的输出:

<html><div style='text-align: center;'>Testing</div></html>

期望的输出:

Testing

共有三个选项:

  1. 你选择你最喜欢的 HTML 解析器并解析 HTML;请参阅 here 以获取一些灵感。这是迄今为止最稳健、最直接的解决方案;但当然:成本高昂。
  2. 如果您非常了解标签中的确切 HTML 内容,那么您可以求助于正则表达式;或其他字符串解析方式。问题是:如果你不控制这些字符串,那么想出你自己的自定义 "parsing" 是 hard。因为对 HTML 进行的任何更改...都可能破坏您的小解析器。
  3. 您重新设计了整个设计:如果 HTML 文本是您应用程序中的核心内容,您可能会考虑在 class 中真正 "represent"。例如,通过创建您自己的 JLabels 版本,它接受一些 HtmlString 输入...并简单地记住哪些部分是 HTML,哪些部分是 "pure text".

哇哦;您显示的代码已经适用于选项 3。因此,如果您想要 getText() returns 原始文本,您可以添加一个简单的

@Override
public void String getText() {
  return this.text;
}

到您的 CustomLabel class。

编辑:或者,您可以简单地添加一个 new 方法,例如

public void String getTextWithoutHtmlTags()

或类似的东西;因为覆盖继承的方法以某种方式改变了那个方法的"contract"。哪个(取决于上下文)可能没问题,或者不太好。

不需要复杂的代码或第 3 方 JARS/库。
这是一个使用 RegEx 的简单解决方案:

String htmlStr = "<html><h1>Heading</h1> ...... </html>";
String noHtmlStr = htmlStr.replaceAll("\<.*?\>", "");

对我来说效果很好。 希望这有帮助。