gpt4 book ai didi

Java 全部替换

转载 作者:行者123 更新时间:2023-11-30 06:35:21 25 4
gpt4 key购买 nike

我正在尝试替换字符串中的一些单词并使用以下代码

someMoreString = someString.replaceAll("\\b(shoe||apple|search|employee|expert)\\b", "");

它工作正常。今天我发现它并不能代替一些词。替换列表很长我无法全部验证。但是,我发现 search 单词在文件中从未被替换过。我怀疑还会有更多这样的案例。

知道为什么会这样吗?我怎样才能阻止它?

编辑

谢谢大家的回答。我找到了解决方案:-)

我在替换字符串中添加了两个条形符号,导致了这个问题。例如:

someMoreString = someString.replaceAll("\b(shoe||apple|search|employee|expert)\b", "");

我不知道,为什么它没有报错,为什么它替换了一些词。

最佳答案

更新问题后回答

你的双管的问题是它会寻找匹配项来替换,因此替换任何与第一个词(“shoe”)匹配的东西,如果它不起作用寻找下一个潜在的匹配项,这是一个空字符串(在两个管道之间)。所以你会找到这些匹配项并(讽刺地)用空字符串替换它们。当找到该位置的匹配项时,它会切换到下一个可能的位置并且不检查该位置的其他词。

很可能,双管道之后的任何单词都没有被替换。

它没有产生错误,因为语法是有效的,并且在某些合法的情况下您想要查找空字符串来插入字符。


原始答案

保留其他人遇到的类似错误。

这显然有效,所以只剩下几个选项:

  1. 您需要分配返回值(字符串在 Java 中是不可变的as also mentioned by Ehran)
  2. 字符串中有一些不可打印的字符;
  3. 读取输入并进行比较时出现编码问题;
  4. 您的单词由未注册边界的内容分隔。
  5. 您需要不区分大小写的搜索(使用 Pattern.compile(regex, flags).m​​atcher(str).replaceAll(repl),使用 CASE_INSENTIVE 标志来编译 pattern )
  6. 我们看不到其他地方有问题,因为您提供:
    • 整个代码都不是
    • 也不是输入数据。

请提供更多代码和您的输入摘录。

如果您从套接字读取,请确保为您的请求指定正确的 header ,并确保您使用有效的内容类型和字符编码。还请确保您没有在源文件和输入数据文件上使用奇怪的编码。

这是我在关于 why the java String.contains method does not return found matches correctly 的问题上给出的另一个答案的部分重写.

关于Java 全部替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6158740/

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