无法用java替换html字符串中的某些文本

Posted

技术标签:

【中文标题】无法用java替换html字符串中的某些文本【英文标题】:Can not replace a certain text in an html string with java 【发布时间】:2019-01-05 16:23:50 【问题描述】:

我有一个方法假设在将 html 字符串发送到客户电子邮件之前替换它的一部分。 我曾尝试使用 java replaceAll() 方法,但没有成功。 这是我迄今为止尝试过的:

data.replaceAll("dd%title%dd", "This is the Title");
data.replaceAll("dd%message%dd", "This is the message body");

但是当我尝试这个时它不起作用,我不断得到字符串而没有被替换。 这是我在雅虎邮箱收件箱中收到的邮件图片: Yahoo mail screenshot

我尝试使用正则表达式替换,但它没有按我的预期工作。

这是我现在拥有的

/******************* CONSTRUCTING THE MESSAGE TRANSLATOR ********************/
    private String msgTranslate(String subject, String messaging)
        // HERE WE START CONSTRUCTING THE MESSAGE TRANSLATE
        String content="";
        String data="";
        DjadeUtil util=new DjadeUtil();
        // NOW LETS START PROCESSING
        if(messaging!=null && subject!=null)
            // Now lets read
            try 
                data=util.readByScanner(TEMPLATESOURCE);
                // Now lets check
                if(data.length()>0)
                    // Here we start matching to replace
                    StringBuffer sb = new StringBuffer(data.length());
                    Pattern patA = Pattern.compile("dd%title%dd");
                    Pattern patB = Pattern.compile("dd%message%dd");

                    Matcher mA = patA.matcher(data);
                    Matcher mB = patB.matcher(data);

                    while (mA.find()) 
                        mA.appendReplacement(sb, subject);
                    // End of while loop

                    while (mB.find()) 
                        mB.appendReplacement(sb, messaging);
                    // End of while loop

                    //HERE WE STORE NEW CHANGE
                    mA.appendTail(sb);
                    mB.appendTail(sb);
                    content=sb.toString();
                
             catch (FileNotFoundException e) 
                // TODO Auto-generated catch block
                e.printStackTrace();
            
        
        // Here we return string
        return content;
    

这是我的 html 字符串

<div style="line-height: 20px;">
                    <!-- THE BODY OF NEWSLATER GOES HERE //-->
                    <div class="newTitle">dd%title%dd</div>
                    <div class="newBody">dd%message%dd</div>
                    <div class="newButtons">
                        <button class="butNews" onclick="window.location='https://napoleoninvestment.net/?page_id=12'">Join our Telegram</button>
                        <button class="butNews" onclick="window.location='https://napoleoninvestment.net/?page_id=391'">Invest Now</button>
                    </div>
                </div>

我想将“dd%title%dd”替换为“This is the Title”,将“dd%message%dd”替换为“This is the message body”。 我不知道哪里出了问题。任何帮助将不胜感激

【问题讨论】:

虽然您有一个可行的解决方案,但这并不是说这是一种不好的方式。更好的选择是使用模板引擎,例如 Thymeleaf(理解 HTML 结构)或 Velocity/Mustache。 【参考方案1】:

我想你忘记重新分配data。您不需要replaceAll,因为不需要正则表达式匹配。

data = data.replace("dd%title%dd", "This is the Title");
data = data.replace("dd%message%dd", "This is the message body");

【讨论】:

哦,是的,我完全忘记了

以上是关于无法用java替换html字符串中的某些文本的主要内容,如果未能解决你的问题,请参考以下文章

在java中如何修改文本文件中的某一行的某些数据??

Java:用可点击的 HTML 链接替换文本 URL

Java:从文本文件字符串中替换“[”“]”

查找和替换文件中的单词/行

用 Java 中的 PDFbox 替换或删除 PDF 中的文本

Android怎么用正则表达式替换字符串某些字符?