gpt4 book ai didi

java - 从特定索引替换字符串中子字符串的上一个和下一个索引

转载 作者:行者123 更新时间:2023-12-02 02:53:16 27 4
gpt4 key购买 nike

假设我有一个字符串:

String someString = "<html><body><div><div><div class="unknown"><b>Content</b></div></div></div></body></html>";

在此字符串中,“内容”的位置是已知的。

现在,我想把最里面的div变成span标签。所以我想做的是:

someString.replacePreviousOccurrence(someString.indexOf("Content"), "<div ", "<span>");
someString.replaceNextOccurrence(someString.indexOf("Content"), "</div>", "</span>");

Java中有什么东西可以做到这一点吗?或者只是从指定索引获取子字符串的上一个和下一个出现的索引?

编辑:忘记指定 div 具有未知标签(可能有类和内容),并且中间可能有内容(如示例中的标签)。

最佳答案

您绝对可以使用正则表达式来做到这一点,尽管它可能不是最优雅的解决方案。以下是您可能使用的模式:<div>(?!<div>).*(?<!<\/div>)<\/div>

这可以通过使用 negative lookahead and negative lookbehind 来实现。这里的负向前瞻:(?!<div>)说找到这个模式,其中后面没有 "<div>"以及这里的负面回顾:(?<!<\/div>)说找到这个模式,它前面没有 </div>

所以模式被打破:

<div>   //matches <div>
(?!<div>) //that isn't followed by <div>
.* //followed by any character any number of times
(?<!<\/div>) // Where the next match isn't preceded by <div>
<\/div> //matches </div>

因此,对于这个问题,您可以执行以下操作:

String str = "<html><body><div><div><div class="unknown"><b>Content</b></div></div></div></body></html>";
Pattern p = "<div>(?!<div>).*(?<!<\/div>)<\/div>";
Matcher m = p.matcher(str);
String output = m.replaceAll("<div>", "<span>").replaceAll("</div>", "</span>");

关于java - 从特定索引替换字符串中子字符串的上一个和下一个索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43477889/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com