您正在尋找lookaround機制。您的代碼可以看看或多或少像
yourString = yourString.replaceAll("(?<!cat|bird|dog)\\s(?!cat|bird|dog)"," dog ")
// ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
// negative look-behind negative look-ahead
您可以通過使用情況旗(?i)
提高不敏感的regex。
您還可以添加word boundaries(\b
)以確保您匹配的是整個單詞,而不僅僅是其部分,如cataclysm
。
演示(我還用non-capturing group (?:...)
來提高性能略):
String[] data ={ "Good Dog", "Large Brown", "Cat Ugly"};
for (String s : data){
System.out.println(s.replaceAll("(?i)(?<!\\b(?:cat|bird|dog)\\b)\\s(?!\\b(?:cat|bird|dog)\\b)"," dog "));
}
輸出:
Good Dog
Large dog Brown
Cat Ugly
@RealSkeptic我在改善這個答案:)中間一直在尋找正確的鏈接這可以爲讀者提供更多信息。 – Pshemo
非常感謝你這麼多! – user2816352
@ user2816352不客氣:) – Pshemo