Java-字符串替换精确单词

Java-字符串替换精确单词,java,string,Java,String,通过这个代码,我试图用剑替换确切的单词斧。但是,如果我运行此命令,它将打印剑鹤嘴锄,而我只想打印剑鹤嘴锄,因为鹤嘴锄与斧是不同的词,尽管它包含它。我怎样才能解决这个问题?谢谢使用带有\b的正则表达式: String x = "axe pickaxe"; x = x.replace("axe", "sword"); System.out.print(x); 边界符号的反斜杠必须转义,因此双反斜杠。包括要替换的单词前后的单词boundary String s = "axe pickaxe"; Sy

通过这个代码,我试图用
替换确切的单词
。但是,如果我运行此命令,它将打印
剑鹤嘴锄
,而我只想打印
剑鹤嘴锄
,因为
鹤嘴锄
是不同的词,尽管它包含它。我怎样才能解决这个问题?谢谢

使用带有
\b
的正则表达式:

String x = "axe pickaxe";
x = x.replace("axe", "sword");
System.out.print(x);

边界符号的反斜杠必须转义,因此双反斜杠。

包括要替换的单词前后的单词boundary

String s = "axe pickaxe";
System.out.println(s.replaceAll("\\baxe\\b", "sword"));
编辑输出

String x = "axe pickaxe axe";
x = x.replaceAll("\\baxe\\b", "sword");
System.out.print(x);

您可以使用
\b
定义单词边界,因此在本例中
\baxe\b

sword pickaxe sword

您需要使用replaceAll而不是replace,因为它可以处理正则表达式。然后使用元字符\b作为单词边界。为了使用它,您需要将\as double\转义,使rege变成
\\baxe\\b
一些其他答案建议您使用
\\b
单词边界来匹配一个确切的单词。但是
\\bfoo\\b
将匹配
.foo.
中的子字符串
foo
。如果您不想要这种类型的行为,那么您可以考虑使用基于查找的正则表达式。
System.out.println("axe pickaxe".replaceAll("\\baxe\\b", "sword"));

System.out.println(string.replaceAll((?如果您只想替换第一个匹配项,则
string
对象中有一个方法
replaceFirst

System.out.println(string.replaceAll("(?<!\\S)axe(?!\\S)", "sword"));

x=x.replace(“axe”、“swark”);只需在axe之后添加一个空格,如果
axe
位于括号中或后跟逗号,则无法解决此问题。与java不同,此问题应具有正则表达式tag@OtiNaNai为什么不呢?”(斧头)或“斧头”与“kaxe”仍然不同“所以,是的,如果你解释
,你可能会吸引更多的投票(不,额外的解释似乎不会吸引更多的投票;-P但回到主题:你的解决方案排除了匹配句子结尾,不是吗?然后,我们也不知道OP数据集的一般结构。当然。
String s=“axe.pickaxe”;System.out.println(s.replaceAll(“(?@hiergiltdiestfu请再次阅读我的解决方案。我认为op是指除了原始字符串之外没有任何字符的完整单词。在您的示例中,它有
斧头。
,因此失败。我认为op是指除了空格之外没有任何字符的完整单词。您做出了一个假设n关于数据集和OP意图的更多细节-没关系。但是,OP的注释指向其他地方(参见他在q上的第二条注释)。无论如何,+1表示高级环视功能:)如果字符串事先包含诸如“!”之类的特定字符,是否有办法避免替换axe?例如,如果字符串是“!axe”,那么斧子就不应该被替换了(现在是这样),但是如果字符串是“斧子”,它应该被剑替换。
System.out.println(string.replaceAll("(?<!\\S)axe(?!\\S)", "sword"));
String x = "axe pickaxe";
x = x.replaceFirst("axe", "sword");
System.out.print(x); //returns sword pickaxe