【发布时间】:2018-06-05 10:04:22
【问题描述】:
我想用一些背景颜色更改 HTML 元素的文本内容。 HTML 的格式是这样的
<html>
<head></head>
<body>Gc <br>
Stable <br>
Oral intake better <br>
Urine stool normal <br>
</body>
</html>
我有如下关键字需要匹配:
Gc,Stable,Oral,Urine
我有字符串形式的html
"<html><head></head><body>Gc <br>Stable <br>Oral intake better <br>Urine stool normal <br>Pain Relief <br>Vital stable <br>No problem <br>Adv tab pan 40mg 1od <br>Tab pcm500mg 6hourly <br>Cab gab 300mg 1bd <br>Cab becasol 1od <br>Cab Tramadol 50mg 6hourly </body></html>"
我想匹配元素文本内容,如果它在 HTML 字符串中匹配,则用关键字替换它们。我会用给定背景颜色和匹配关键字文本的 span 来更改它们。
生成的 HTML 如下所示。
<html>
<head></head>
<body>
<div>
<div>
<span style="background: #FF9999;">Gc</span>
<br><span style="background: #FF9999;">Stable</span>
<br><span style="background: #FF9999;">Oral</span> intake better
<br><span style="background: #FF9999;">Urine</span> stool normal
<br>Pain Relief
<br>Vital stable
<br>No problem
<br>Adv tab pan 40mg 1od
<br>Tab pcm500mg 6hourly
<br>Cab gab 300mg 1bd
<br>Cab becasol 1od
<br>Cab Tramadol 50mg 6hourly
</div>
</div>
</body>
</html>
我怎样才能在java中实现它。我正在使用 jsoup 库。
此代码对我有用。这是最佳方法吗?或者任何更好的方法来替换 html 字符串
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.TextNode;
import org.jsoup.parser.Tag;
import org.jsoup.select.Elements;
public class regexReplaceHtml {
public static void main(String args[]) throws IOException {
String html2 = "<html><head></head><body>Gc <br>Stable <br>Oral intake better <br>Urine stool normal <br>Pain Relief <br>Vital stable <br>No problem <br>Adv tab pan 40mg 1od <br>Tab pcm500mg 6hourly <br>Cab gab 300mg 1bd <br>Cab becasol 1od <br>Cab Tramadol 50mg 6hourly </body></html>";
String html = "<div>" + html2 + "</div>";
Document doc = Jsoup.parse(html);
List<String> keywords = new ArrayList<String>();
keywords.add("Gc");
keywords.add("Stable");
keywords.add("Oral");
keywords.add("Urine");
String convertedString = replaceHtmlString(doc.html(),keywords);
System.out.println(convertedString);
}
public static String replaceHtmlString(String html, List<String> keywords) {
String htmlString = "<div>" + html + "</div>";
Document doc = Jsoup.parse(htmlString);
Elements elements = doc.body().children().select("*");
for (Element element : elements) {
List<TextNode> tnList = element.textNodes();
for (TextNode tn : tnList) {
String nodeTrimmedText = tn.text().trim();
for (int i = 0; i < keywords.size(); i++) {
String keyword = keywords.get(i);
if (isContainExactWord(nodeTrimmedText, keyword)) {
String nodeText = tn.text();
String keywordHtmlString = "<span style=\"background: #FF9999;\">" + keyword + "</span>";
String replacedTextHtmlString = nodeText.replace(keyword, keywordHtmlString);
tn.text(replacedTextHtmlString);
}
}
}
}
//I had to replace the < and > with the respective symbols
return doc.html().replaceAll("<", "<").replaceAll(">", ">");
}
private static boolean isContainExactWord(String fullString, String partWord) {
String pattern = "\\b" + partWord + "\\b";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(fullString);
return m.find();
}
}
【问题讨论】:
-
如果您将 html 作为字符串,则简单的解决方案是使用 String.replace() 方法。