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”)匹配的任何单个匹配项,如果不起作用,则查找下一个潜在匹配项,即空字符串(在两个管道之间)。因此,您可以找到这些匹配项,并(讽刺地)用空字符串替换它们。当找到此位置的匹配项时,它会切换到下一个潜在位置,并且不会检查该位置的其他单词
很有可能,在双重管道之后的任何单词都没有被替换
它没有产生错误,因为语法是有效的,并且在某些合法情况下,您希望查找空字符串以插入字符
原始答案 为其他人遇到的类似错误保留 这显然有效,因此只剩下几个选项:
Pattern.compile(regex,flags).matcher(str).replaceAll(repl)
,使用不区分大小写的标志来编译- 也不是全部代码
- 也不是输入数据
这部分内容被我在这个问题上给出的另一个答案部分重写。我建议找到一个可重复的测试用例。这是一个用例问题吗?你能提供一个失败的短字符串吗?该死的,你赢了我,我想,在我的回答中我会相信你的。谢谢,我已经把它分配给了一个字符串。我更新了我的问题谢谢你的回答。我想前两个可能是原因。因为它只发生在我读取一个文件,然后搜索替换时。如何避免/控制它们?如果您在unix/linux计算机上,请尝试使用
cat-e MY_文件
显示不可打印的字符,以检查源文件和输入文件。@user751637:例如,此“文本”文件中是否有不间断的空格?@user751637:请在此处以文本或上传到其他地方的文件的形式提供您的输入数据,并提供更多的代码,以便我们可以看到您如何读取输入。我们现在多次询问更多细节。我更新了我的答案,提供了更多的可能性和建议,但是如果没有这些数据,深入挖掘将会很困难。Haylen,谢谢你快速而翔实的回答。我更新了我的问题。我找到了解决办法,但我不知道原因和方法!。你能帮我解释一下这个问题吗?