【问题标题】:Java to replace fields in HTMLJava替换HTML中的字段
【发布时间】:2022-01-07 18:00:30
【问题描述】:

使用java我想替换每个{}

<td width="66"><p>{}</p></td><td width="96">
          <p><u><a href="{}">{}</a></u></p></td><td width="111"><p>{}</p></td>
<td width="283"><p>{}</p></td><td width="215"><p>{}</p></td>
<td width="137"><p>{}</p></td><td width="92"><p>{}</p></td>
<td width="99"><p><em>{}</em></p></td><td width="109"><p>{}</p></td>
<td width="109"><p>{}</p></td> 

在 mty java 应用程序中具有值。我尝试使用 jsoup (https://jsoup.org/) 和 ThymeLeaf,但都没有运气?然后替换后我想通过电子邮件发送该html。任何帮助将不胜感激。谢谢

【问题讨论】:

  • 用什么替换?字符串 replaceAll 方法有什么问题?
  • 抱歉,我将用我的应用程序中的字符串值替换 {}
  • 您想用相同的值替换所有出现的{} 吗?如果是这样,请使用replaceAll。否则,使用indexOf("{")indexOf("}")一一替换
  • 不,这将是不同的值。我将不得不查找 indexOf("{") 和 indexOf("}") 以及如何使用它。是否会遍历字符串以查找括号?
  • 如果您可以对{}s 进行零索引,例如{0}{1} 等,那么您可以为此使用java.text.MessageFormat.format(..)。是否可以生成这样的 HTML 模板文本?

标签: java html thymeleaf jsoup


【解决方案1】:

您可以将要替换的值存储在任何集合中并执行以下操作:

static final Pattern PLACE_HOLDER = Pattern.compile("\\{\\}");

public static void main(String[] args) {
    String input = "<td width=\"66\"><p>{}</p></td><td width=\"96\">\n"
        + "<p><u><a href=\"{}\">{}</a></u></p></td><td width=\"111\"><p>{}</p></td>\n"
        + "<td width=\"283\"><p>{}</p></td><td width=\"215\"><p>{}</p></td>\n"
        + "<td width=\"137\"><p>{}</p></td><td width=\"92\"><p>{}</p></td>\n"
        + "<td width=\"99\"><p><em>{}</em></p></td><td width=\"109\"><p>{}</p></td>\n"
        + "<td width=\"109\"><p>{}</p></td>";

    List<String> replacements = List.of("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K");
    Iterator<String> iterator = replacements.iterator();
    String output = PLACE_HOLDER.matcher(input).replaceAll(matcher -> iterator.next());

    System.out.println(output);
}

输出:

<td width="66"><p>A</p></td><td width="96">
<p><u><a href="B">C</a></u></p></td><td width="111"><p>D</p></td>
<td width="283"><p>E</p></td><td width="215"><p>F</p></td>
<td width="137"><p>G</p></td><td width="92"><p>H</p></td>
<td width="99"><p><em>I</em></p></td><td width="109"><p>J</p></td>
<td width="109"><p>K</p></td>

【讨论】:

    【解决方案2】:

    您可以通过以下方式使用 Jsoup 完成此操作

        public static void replaceHtml() {
            String HEADER = "<html><head></head><body><table><tbody><tr>";
            String TAILER = "</tr></tbody></table></body></html>";
            String data = HEADER + "<td width=\"66\"><p>{}</p></td><td width=\"96\">\n" +
                "          <p><u><a href=\"{}\">{}</a></u></p></td><td width=\"111\"><p>{}</p></td>\n" +
                "<td width=\"283\"><p>{}</p></td><td width=\"215\"><p>{}</p></td>\n" +
                "<td width=\"137\"><p>{}</p></td><td width=\"92\"><p>{}</p></td>\n" +
                "<td width=\"99\"><p><em>{}</em></p></td><td width=\"109\"><p>{}</p></td>\n" +
                "<td width=\"109\"><p>{}</p></td>" + TAILER;
            Document doc = Jsoup.parse(data);
            Element table = doc.select("table").get(0); //select the first table.
            Elements rows = table.select("tr");
            Elements d = rows.select("td"); //select the first table.
            for (int i = 0; i < d.size(); i++) {
                //replace according to your need
                d.get(i).text("mytext");
            }
            doc.outputSettings().prettyPrint(false);
            String replacedData = doc.toString();
            replacedData = replacedData.replaceAll(HEADER, "");
            replacedData = replacedData.replaceAll(TAILER, "");
            System.out.println(replacedData);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 2011-06-09
      • 1970-01-01
      • 2021-08-05
      • 1970-01-01
      相关资源
      最近更新 更多