模式匹配器替换所有

时间:2012-06-17 14:11:51

标签: java android regex

我只是试图(徒劳)在循环中删除'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(" "); 

我也尝试了上面的许多其他组合,但我无法得到我想要的输出......

请你能让我摆脱痛苦......

3 个答案:

答案 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()