gpt4 book ai didi

java - 是否可以将 replaceAll() 与通配符一起使用

转载 作者:搜寻专家 更新时间:2023-11-01 01:36:18 24 4
gpt4 key购买 nike

早上好。我意识到有很多关于替换和 replaceAll() 的问题但我还没有看到这个。

我想做的是解析一个字符串(其中包含有效的 html 到一个点),然后在我看到 <p> 的第二个实例之后在字符串中,我想删除以 & 开头并以 ; 结尾的所有内容直到我看到下一个</p>

为了完成第二部分,我希望使用类似于 s.replaceAll("&*;","") 的东西

这行不通,但希望它能理解我的观点,即我正在寻找替换以 & 开头并以 ; 结尾的任何内容

最佳答案

您可能应该将解析留给 DOM 解析器 (see this question)。我几乎可以保证您必须这样做才能在 <p> 中找到文本标签。

对于替换逻辑,String.replaceAll使用正则表达式,可以做你想要的匹配。

您想要的正则表达式中的“通配符”是 .*表达。使用您的示例:

String ampStr = "This &escape;String";
String removed = ampStr.replaceAll("&.*;", "");
System.out.println(removed);

这会输出 This String .这是因为 .代表任意字符,*表示“这个字符出现 0 次或多次”。所以.*基本上意味着“任意数量的字符”。然而,喂它:

"This &escape;String &anotherescape;Extended"

可能不会做你想做的,它会输出This Extended .要解决此问题,您可以准确指定要查找的内容,而不是 .。特点。这是使用 [^;] 完成的,意思是“任何不是分号的字符:

String removed = ampStr.replaceAll("&[^;]*;", "");

这比 &.*?; 有性能优势对于不匹配的字符串,所以我强烈推荐使用这个版本,特别是因为不是所有的 HTML 文件都包含 &abc; token 和 &.*?;因此,版本可能存在巨大的性能瓶颈。

关于java - 是否可以将 replaceAll() 与通配符一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12376939/

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