java - 如何在java中删除带有特殊字符的单词边界字符串

标签 java string

我正在尝试使用replaceAll api从句子中删除子字符串。

Ex: String str = "Condition (Where Clause) Address Line1 Collectable (%)"
    str = str.replaceAll("Condition \\(Where Clause\\)","");

这工作正常,但如果字符串类似于 Condition (Where Clause)xyz 那么它也会删除 Condition (Where Clause) 并且生成的字符串将具有 xyz。我只想替换精确匹配。为此,我尝试使用 \b 但它末尾有特殊的 char ) 。因此, \\bCondition\\(Where Clause\\)\\b 不起作用。

Ex: String str = "Condition (Where Clause) Address Line1 Collectable (%)"
    str = str.replaceAll("\\bCondition \\(Where Clause\\)\\b","");

由于特殊字符,这不起作用。 如何删除精确匹配。我必须仅删除也可以包含特殊字符的精确匹配。

我也尝试使用正则表达式Pattern,但结果相同。

更新:

我不能使用 \s 因为它也可以位于行尾。 我正在考虑使用 Condition\\(Where Clause\\)(\b|\s|$) 。我正在寻找其他更好的解决方案。

最佳答案

根据您的解释,一些可能的测试用例:

"Condition (Where Clause) Address Line1 Collectable (%)"
"Condition (Where Clause)xyz"
"xyzCondition (Where Clause)"
"At the end: Condition (Where Clause)"
" Condition (Where Clause) "
"xyzCondition (Where Clause)xyz"
"In Condition (Where Clause) Between"

如果您只想准确删除“条件(Where 子句)”,除非它后面直接跟有空格或字符串末尾以外的内容,您可以使用以下内容:

str.replaceAll("(^|\\s)Condition \\(Where Clause\\)(\\s|$)", "$1$2")

这将保留任何前导或尾随空格,因此上面的最后一个测试用例将变为 ""
如果您还想删除那些前导空格,使最后一个测试用例变成空字符串 "",您可以删除上面的 $1$2

这将导致(每个测试用例的第一行保留空格,另一行删除它们):

Try it online看看它的实际效果。

"Condition (Where Clause) Address Line1 Collectable (%)" → " Address Line1 Collectable (%)"
"Condition (Where Clause) Address Line1 Collectable (%)" → "Address Line1 Collectable (%)"
"Condition (Where Clause)xyz" → "Condition (Where Clause)xyz"
"Condition (Where Clause)xyz" → "Condition (Where Clause)xyz"
"xyzCondition (Where Clause)" → "xyzCondition (Where Clause)"
"xyzCondition (Where Clause)" → "xyzCondition (Where Clause)"
"At the end: Condition (Where Clause)" → "At the end: "
"At the end: Condition (Where Clause)" → "At the end:"
" Condition (Where Clause) " → "  "
" Condition (Where Clause) " → ""
"xyzCondition (Where Clause)xyz" → "xyzCondition (Where Clause)xyz"
"xyzCondition (Where Clause)xyz" → "xyzCondition (Where Clause)xyz"
"In Condition (Where Clause) Between" → "In  Between"
"In Condition (Where Clause) Between" → "InBetween"

关于java - 如何在java中删除带有特殊字符的单词边界字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54366190/

相关文章:

c# - 将字符串转换为按钮

java - 配对游戏-setCard方法

java - 如何以编程方式接受 cookie 的使用?

java - 如何使用 2 种不同类型的 HashMap 定义 2 个构造函数?

python - 按索引向后切片字符串

java - 如何将文本文件作为字符串读取并仅提取单个字符? "0"

java - 由于 "Lock wait timeout exceeded; try restarting transaction"导致交易失败

java - ClosestFirstIterator,每个路径的上限为 "max hops"

java - 如何将 List<String> 列表转换为 csv 字符串

string - 批处理或 PowerShell : How to get the last word from string?