【问题标题】:JAVA How to retrieve text content from custom JLabel without the HTML taggings?JAVA 如何在没有 HTML 标记的情况下从自定义 JLabel 中检索文本内容?
【发布时间】:2016-12-12 06:51:28
【问题描述】:

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

例如

自定义标签:

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

【问题讨论】:

  • 请提供getText()方法的代码
  • 这是默认的getText()方法,返回一个字符串,

标签: java html tags label jlabel


【解决方案1】:

共有三个选项:

  1. 您选择自己喜欢的 HTML 解析器并解析 HTML;请参阅here 以获得一些灵感。这是迄今为止最强大和最直接的解决方案;但当然:代价高昂。
  2. 如果您非常了解标签中包含的确切 HTML 内容,那么您可以使用正则表达式;或其他字符串解析方式。问题是:如果您不控制这些字符串,那么提出您自己的自定义“解析”是困难。因为 HTML 中的每一个变化都可能会破坏你的小解析器。
  3. 您重新设计了整个设计:如果 HTML 文本在您的应用程序中如此重要,您可能会考虑在您的类中真正“表示”它。例如,通过创建您自己的 JLabels 版本,这些版本接受一些 HtmlString 输入......并且只需记住哪些部分是 HTML,以及哪些部分是“纯文本”。

哎呀!您显示的代码已经适合选项 3。因此,如果您希望 getText() 返回该原始文本,您可以添加一个简单的

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

到您的 CustomLabel 类。

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

public void String getTextWithoutHtmlTags()

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

【讨论】:

  • 这些答案可以解决问题。非常感谢你的帮助! :)
【解决方案2】:

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

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

对我来说很好用。 希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2020-12-02
    • 1970-01-01
    • 2015-05-16
    • 2014-09-24
    • 1970-01-01
    • 2017-03-23
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多