Java替换所有

Java替换所有,java,regex,string,Java,Regex,String,我试图替换字符串中的一些单词,并使用以下代码 someMoreString = someString.replaceAll("\\b(shoe||apple|search|employee|expert)\\b", ""); 它很好用。今天我发现它并不能代替一些单词。替换列表很长 我不能全部核实。然而,我发现searchword在文件中从未被替换。我怀疑还会有更多这样的案例 知道为什么会这样吗?我怎样才能阻止这一切 编辑 谢谢大家的回答。我找到了解决办法:-) 我在替换字符串中添加了两个条形符

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

someMoreString = someString.replaceAll("\\b(shoe||apple|search|employee|expert)\\b", "");
它很好用。今天我发现它并不能代替一些单词。替换列表很长 我不能全部核实。然而,我发现
search
word在文件中从未被替换。我怀疑还会有更多这样的案例

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

编辑 谢谢大家的回答。我找到了解决办法:-)

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

someMoreString=someString.replaceAll(“\b(鞋| |苹果|搜索|员工|专家)\b),”

我不知道,为什么它没有给出错误,为什么它替换了一些单词。

“今天我发现它没有替换一些单词”

我认为如果没有作业,你不会真正替换单词,搜索和其他单词都不会。字符串操作是不可变的,请尝试以下操作:

someString = someString.replaceAll("\\b(apple|search|employee|expert)\\b", "");
样本测试:

public class StringTests {

    @Test
    public void replaceAllTest() {      
        String someString ="bla bla search bla";
        System.out.println(someString);
        someString.replaceAll("\\b(apple|search|employee|expert)\\b", "");
        System.out.println(someString);
        someString = someString.replaceAll("\\b(apple|search|employee|expert)\\b", "");
        System.out.println(someString);

        assertEquals(someString, someString.replaceAll("\\b(apple|search|employee|expert)\\b", ""));
    } 

}
更新问题后的回答 双管道的问题是,它将查找要替换的匹配项,从而替换与第一个单词(“shoe”)匹配的任何单个匹配项,如果不起作用,则查找下一个潜在匹配项,即空字符串(在两个管道之间)。因此,您可以找到这些匹配项,并(讽刺地)用空字符串替换它们。当找到此位置的匹配项时,它会切换到下一个潜在位置,并且不会检查该位置的其他单词

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

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


原始答案 为其他人遇到的类似错误保留

这显然有效,因此只剩下几个选项:

  • 您需要分配返回值(字符串在Java中是不可变的)
  • 字符串中有一些不可打印的字符
  • 读取输入并比较时存在编码问题
  • 您的单词由未注册边界的内容分隔
  • 您需要不区分大小写的搜索(使用
    Pattern.compile(regex,flags).matcher(str).replaceAll(repl)
    ,使用不区分大小写的标志来编译
  • 其他地方出了点问题,我们看不到,因为你给出了:
    • 也不是全部代码
    • 也不是输入数据
  • 请提供更多代码和您的输入摘录

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


    这部分内容被我在这个问题上给出的另一个答案部分重写。

    我建议找到一个可重复的测试用例。这是一个用例问题吗?你能提供一个失败的短字符串吗?该死的,你赢了我,我想,在我的回答中我会相信你的。谢谢,我已经把它分配给了一个字符串。我更新了我的问题谢谢你的回答。我想前两个可能是原因。因为它只发生在我读取一个文件,然后搜索替换时。如何避免/控制它们?如果您在unix/linux计算机上,请尝试使用
    cat-e MY_文件
    显示不可打印的字符,以检查源文件和输入文件。@user751637:例如,此“文本”文件中是否有不间断的空格?@user751637:请在此处以文本或上传到其他地方的文件的形式提供您的输入数据,并提供更多的代码,以便我们可以看到您如何读取输入。我们现在多次询问更多细节。我更新了我的答案,提供了更多的可能性和建议,但是如果没有这些数据,深入挖掘将会很困难。Haylen,谢谢你快速而翔实的回答。我更新了我的问题。我找到了解决办法,但我不知道原因和方法!。你能帮我解释一下这个问题吗?