我已经找到了几个有类似问题和有价值答案的主题,但我仍然在纠结这个:
我想用Jsoup解析一些html,这样我就可以替换,例如,
"changeme"
与
<changed>changeme</changed>
,但仅当它出现在html的文本部分时,如果它是标签的一部分,则不会。所以,从这个html开始:
<body>
<p><a href="http://changeme.html">test changeme app</a></p>
</BODY>
</HTML>
我想说的是:
<body>
<p><a href="http://changeme.html">test <changed>changeme</changed> app</a></p>
</BODY>
</HTML>
我尝试了几种方法,这种方法使我更接近预期的结果:
Document doc = null;
try {
doc = Jsoup.parse(new File("tmp1450348256397.txt"), "UTF-8");
} catch (Exception ex) {
}
Elements els = doc.body().getAllElements();
for (Element e : els) {
if (e.text().contains("changeme")) {
e.html(e.html().replaceAll("changeme","<changed>changeme</changed>"));
}
}
html = doc.toString();
System.out.println(html);
但使用这种方法,我发现了两个问题:
<body>
<p><a href="http://<changed>changeme</changed> .html">test
<changed>
changeme
</changed>
app</a></p>
</BODY>
</HTML>
>
换行符在我引入的新元素之前和之后插入。这不是一个真正的问题,因为如果我使用#change#进行替换,并且在doc.toString()之后,我可以将它们再次替换为所需的值(用
真正的问题是:href中的URL已被修改,我不希望它发生。
想法?Thx。
这是我的解决方案:
String html=""
+"<p><a href=\"http://changeme.html\">"
+ "test changeme "
+ "<div class=\"changeme\">"
+ "inner text changeme"
+ "</div>"
+ " app</a>"
+"</p>";
Document doc = Jsoup.parse(html);
Elements els = doc.body().getAllElements();
for (Element e : els) {
List<TextNode> tnList = e.textNodes();
for (TextNode tn : tnList){
String orig = tn.text();
tn.text(orig.replaceAll("changeme","<changed>changeme</changed>"));
}
}
html = doc.toString();
System.out.println(html);
TextNodes始终是叶节点,即它们不包含更多的HTML元素。在最初的方法中,您用替换了< code>changme字符串的新HTML替换元素的HTML。您只需检查changeme是否是TextNodes内容的一部分,但是您会替换元素的HTML字符串中的所有出现的内容,包括TextNodes之外的所有出现的内容。
我的解决方案基本上像你的一样工作,但我使用JSoup方法文本Nodes()
。这样我就不需要进行类型转换。
P.S.当然,我的解决方案和您的解决方案都将包含<code>
我试图开发一个由多个数组和文本视图组成的应用程序,我遇到了一个问题。 我有3个文本视图和2个数组。 我的一个数组包含句子。我的第一个问题是如何突出每个句子中的特定单词?例如:“这是我的第一个数组项”,我需要突出显示字符串中的一个单词,这样当它显示在文本视图1中时,它就会像这样出现..."这是我的第一个数组物品" 我的另一个数组包含单词。它们显示在textview2中,也应高亮显示。我的下一个问题是
问题内容: 我使用正则表达式从网页中获取字符串,并且该字符串的一部分可能包含我想替换为其他内容的内容。这怎么可能呢?我的代码是这样的,例如: 问题答案:
主要目标是用hashmap中的值替换字符串中的一些单词作为关键字(关键字是文本中的单词)。钥匙的格式不同。例如:主文本:“Lookahead和Lookahead,统称为Lookahead,是[0-23]断言”hashmap:{Lookahead=test1,Lookahead=test2,Lookahead=test3,[0-23]=newvalue}预期输出:“test1和test2,统称为te
我有一个将sql查询读取为字符串的方法,需要将所有“\”替换为“\”。这样做是为了防止\n和\r被处理为输出中的换行符。 样本输入 (\nSELECT\na.population_id\n,a.empi_id\n\r,a.encounter_id\n,SPLIT_PART(MIN(a.service_date||'|'|| a.norm_numeric_value),'|',2)::FLOAT为e
我有以下字符串输出: 但是我想在Java中有如下格式的输出 请帮帮我。 我正在将对象转换为json数据。请参见以下代码 我想将此应用于使用java 7的jsonString变量,就像不使用java 8一样
问题内容: 我正在尝试获取字符串的前10个字符,并想用替换空格。 我有 但是我不确定下一步该怎么做。 我想要绳子 这是对字符串的测试。 成为 this_is_th 问题答案: 只需使用str_replace: 您可以在上一个和呼叫之后执行此操作,如下所示: 但是,如果您想花哨的话,可以一行完成: