我只是试图(徒劳)在循环中删除'at'这个单词的所有实例。
Pattern atPattern = Pattern.compile(".*\\bat\\b.*");
String input = "at Pat's attic a fat cat catcher at patted at"
// required output "Pat's attic a fat cat catcher patted"
output = input.replace(atPattern.pattern(), " ");
output= input.replaceAll(".*\\bat\\b.*", " ");
Matcher atMatcher = atPattern.matcher(input);
output = atMatcher.replaceAll(" ");
// Starting to clutch at straws now...
Matcher atMatcher = Pattern.compile(".*\\bat\\b.*").matcher(input);
output = atMatcher.matcher(input).replaceAll(" ");
output = atPattern.matcher(input).replaceAll(" ");
我也尝试了上面的许多其他组合,但我无法得到我想要的输出......
请你能让我摆脱痛苦......
答案 0 :(得分:2)
单replaceAll(...)
就足够了,您需要在at
之后删除一些可选空格:
String input = "at Pat's attic a fat cat catcher at patted at";
String expected = "Pat's attic a fat cat catcher patted";
System.out.println(input.replaceAll("\\bat\\b\\s*", "").trim());
System.out.println(expected.trim());
以上将打印:
Pat's attic a fat cat catcher patted
Pat's attic a fat cat catcher patted
答案 1 :(得分:1)
可以通过以下方式完成:
"at Pat's attic a fat cat catcher at patted at"
.replaceAll("\\bat\\b","").trim().replaceAll(" +", " ")
trim()
和第二个replaceAll()
用于删除空格。
可能有其他方法可以一步完成所有这些(可能更快?),但是将它们分开更容易考虑逻辑。
修改强>
以防万一,这是一个一步到位的解决方案:
.replaceAll("(?i)(\\bat\\b | ?\\bat\\b)","")
添加(?i)
以防止不区分大小写。如果您不需要,可以将其删除。
答案 2 :(得分:1)
你可以这样做
.replaceAll("(\\s|^)(at)(\\s|$)", " ").trim()