将HTML标签格式化为Java字符串

4

我需要帮助 我有一个像这样的字符串

String myString = "The accuracy of a potentiometer (pH meter) is
                   &#177;0.1 mV. A solution contains 1x10<SUP>-4<\/SUP> mol\/L Cl
                   <SUP>-<\/SUP> and 1x10<SUP>-3<\/SUP> mol\/L Ca<SUP>2+<\/SUP>. 
                   What is the error in concentration to be expected when measuring
                   these ions with a chloride or a calcium ion selective electrode? 
                   <TABLE BORDER=0 ALIGN=CENTER> <TR><TD>    <\/TD><TD>&nbsp;<\/TD><TD>
                   <\/TD><\/TR><\/TABLE>";

我必须在listView中显示这个字符串,但是当我打印它时,显然有这些html标签。
我已经尝试过去掉标签,但是如果这样做,我会失去一些信息(比如上标-4)。
我想知道是否有可能以适当的方式格式化字符串。
谢谢
更新:
我已经部分解决了,通过使用Html.fromHtml(String)。
public String processString(String html) {
    Spanned spanned;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
        spanned = Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY);
    } else {
        spanned = Html.fromHtml(html);
    }
    return spanned.toString();
}

现在的问题是,<img>标签显示为一个obj图标image,我不知道如何将它们可视化。

这有可能吗?


Apache commons 提供了一个函数来转义 HTML ,即将特殊字符转换为 HTML 实体。可以查看 escapeHtml 函数:https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringEscapeUtils.html - user6073886
你可以通过HTML阅读器运行此代码,但它不是一个完整的文档。https://docs.oracle.com/javase/7/docs/api/javax/swing/text/html/HTMLDocument.HTMLReader.html - DejaVuSansMono
顺便问一下,你是在谈论Android的ListView吗?如果是的话,这个链接可能会有所帮助:https://dev59.com/FWw15IYBdhLWcg3wntAQ - user6073886
@DejaVuSansMono 抱歉,我不知道怎么做。你可以更好地解释一下如何使用吗? - Giovanni Scieri
2个回答

0

您可以使用String.replaceAll方法替换指定正则表达式的所有出现。

示例

myString = myString.replaceAll("<\\s*.+?>", "");

输出(我添加了新行,以提供可读性)

The accuracy of a potentiometer (pH meter) is
&#177;0.1 mV. A solution contains 1x10-4 mol/L Cl
- and 1x10-3 mol/L Ca2+.
What is the error in concentration to be expected when measuring
these ions with a chloride or a calcium ion selective electrode?
     &nbsp;

关于实体值&#177;,这是一个微不足道的任务。
您可以创建一个方法来捕获该值,并将其解析为其Unicode等效项,尽管并非所有实体都使用Unicode值,有时它是字面值,例如“amp”或“lt”。
许多人选择使用Apache Commons Text库来解码实体。 StringEscapeUtils(Apache Commons Text 1.10.0 API)

0

如果您修复了HTML,许多Swing组件就可以在没有任何帮助的情况下正确呈现它:

import javax.swing.*;
import java.awt.*;

public class Se0124 extends JFrame
{
    String myString = "<html>" +
                   "The accuracy of a potentiometer (pH meter) is" +
                   "&#177;0.1 mV. A solution contains 1x10<SUP>-4</SUP> mol/L Cl" +
                   "<SUP>-</SUP> and 1x10<SUP>-3</SUP> mol/L Ca<SUP>2+</SUP>." +
                   "What is the error in concentration to be expected when measuring" +
                   "these ions with a chloride or a calcium ion selective electrode?" +
                   "</html>";

    public Se0124 ()
    {
        super ("Se0124");
        JPanel mainpanel = new JPanel ();
        mainpanel.setLayout (new BorderLayout ());
        this.getContentPane ().add (mainpanel);

        JLabel jl = new JLabel (myString);
        mainpanel.add (jl, BorderLayout.CENTER);
        setSize (400, 400);
        setLocation (100, 100);
        setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        setVisible (true);
    }

    public static void main (String args[])
    {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Se0124 ();
            }
        });
    }
}

正如您所看到的,我已经删除了看起来为空的尾随逗号。然后我将其封装在标签中。并且我从斜杠中删除了反斜杠。

这可以通过正则表达式完成。现在SUP和SUB被正确呈现。


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