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