gpt4 book ai didi

java - 使用单个replaceAll 审查选定的单词(用**** 替换它们)?

转载 作者:行者123 更新时间:2023-12-02 22:33:47 24 4
gpt4 key购买 nike

我想通过用“*”替换单词中的每个字符来审查字符串中的某些单词。基本上我想做

String s = "lorem ipsum dolor sit";
s = s.replaceAll("ipsum|sit", $0.length() number of *));

使得结果s等于“lorem ***** dolor ***”

我知道如何通过重复的 replaceAll 调用来完成此操作,但我想知道,是否可以使用单个 replaceAll 来完成此操作?

<小时/>

更新:这是研究案例研究的一部分,原因基本上是我想摆脱单行,因为它稍微简化了生成的字节码。它不适合严肃的网页或任何东西。

最佳答案

这是对 aioobe 答案的修改,使用嵌套断言而不是嵌套循环来生成断言:

public static void main(String... args) {
String s = "lorem ipsum dolor sit blah $10 bleh";
System.out.println(s.replaceAll(censorWords("ipsum", "sit", "$10"), "*"));
// prints "lorem ***** dolor *** blah *** bleh"
}
public static String censorWords(String... words) {
StringBuilder sb = new StringBuilder();
for (String w : words) {
if (sb.length() > 0) sb.append("|");
sb.append(
String.format("(?<=(?=%s).{0,%d}).",
Pattern.quote(w),
w.length()-1
)
);
}
return sb.toString();
}

一些要点:

  • StringBuilder.append 在循环中而不是 String +=
  • Pattern.quote 转义审查词中的任何 $\

也就是说,这并不是解决问题的最佳方案。这只是一个有趣的正则表达式游戏,真的。

相关问题

<小时/>

它是如何工作的

我们想要替换为"*",因此我们必须一次匹配一个字符。问题是哪个角色。

在这个角色中,如果你回去足够长的时间,然后向前看,你会看到一个被审查的单词。

这是更抽象形式的正则表达式:

(?<=(?=something).{0,N})

此匹配位置允许您返回最多 N 个字符,您可以向前查看并查看某物

关于java - 使用单个replaceAll 审查选定的单词(用**** 替换它们)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2966172/

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