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
共有三个选项:
- 你选择你最喜欢的 HTML 解析器并解析 HTML;请参阅 here 以获取一些灵感。这是迄今为止最稳健、最直接的解决方案;但当然:成本高昂。
- 如果您非常了解标签中的确切 HTML 内容,那么您可以求助于正则表达式;或其他字符串解析方式。问题是:如果你不控制这些字符串,那么想出你自己的自定义 "parsing" 是 hard。因为对 HTML 进行的任何更改...都可能破坏您的小解析器。
- 您重新设计了整个设计:如果 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("\<.*?\>", "");
对我来说效果很好。
希望这有帮助。
如何在没有 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
共有三个选项:
- 你选择你最喜欢的 HTML 解析器并解析 HTML;请参阅 here 以获取一些灵感。这是迄今为止最稳健、最直接的解决方案;但当然:成本高昂。
- 如果您非常了解标签中的确切 HTML 内容,那么您可以求助于正则表达式;或其他字符串解析方式。问题是:如果你不控制这些字符串,那么想出你自己的自定义 "parsing" 是 hard。因为对 HTML 进行的任何更改...都可能破坏您的小解析器。
- 您重新设计了整个设计:如果 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("\<.*?\>", "");
对我来说效果很好。 希望这有帮助。