繁体   English   中英

如何删除Java字符串中的嵌入式括号?

[英]How to remove embedded braces in Java string?

我有一个Java字符串, 可以在一个更大的字符串中多次包含“ { ”和“ } ”对:

"My name is {name}. I am a {animal}. I like to {activity} whenever it rains."

我正在尝试编写将剥离这些对的所有实例的代码:

"My name is . I am a . I like to whenever it rains."

这些对可以出现在字符串内的任何位置 ,并且可能根本不会发生。 显然String#replaceAll(someRegex, "")在这里是有序的,但我似乎无法使someRegex正确:

// My best attempt.
String stripped = toStrip.replaceAll("{*}", "");

有任何想法吗? 提前致谢。

要匹配{ ,你需要逃避它。 因为它在正则表达式中有一些特殊的含义。 所以,你需要\\\\{\\\\} 或者您也可以将它们包含在角色类中。

然后为了匹配它们之间的任何东西,你可以使用.* dot (.)匹配任何字符。 *是量词,表示匹配0 or more

所以,你的正则表达式是: -

\\{.*?\\}  

要么: -

[{].*?[}]

请注意,我在那里使用了一个不情愿的量词 - .*? 注意? 在末尾。 在这种情况下,它用于匹配直到第一个} 如果你使用.*而不是.*? ,你的正则表达式将覆盖从第一个{到最后}的完整字符串,并替换所有内容。

另外,一个特殊的正则表达式元字符,在character class使用时没有特殊含义 - 那个[]东西。 这就是为什么,当你像这样使用它时,你不需要逃避它们。 因此第二个正则表达式。

这看起来很简单,不是吗? 好的,现在是时候通过一些教程来了解有关Regular Expression更多信息。 您可以从http://www.regular-expressions.info/tutorial.html开始

尝试使用最简单的正则表达式\\{\\w*\\} ,如下所示:

    String s  = "My name is {name}. I am a {animal}. I like to {activity} "+
                "whenever it rains.";
    System.out.println(s.replaceAll("\\{\\w*\\}", ""));

上面的正则表达式将{}中包含的单词字符条纹化。 如果要包含某些特殊字符,请将它们与大括号内提到的\\w一起包含在内。

replaceAll("\\\\{.*?\\\\}", "")应该完成这项工作

String stripped = "My name is {name}. I am a {animal}. I like to {activity} whenever it rains.".replaceAll("\\{.*?\\}", "");
System.out.println(stripped);

打印My name is . I am a . I like to whenever it rains. My name is . I am a . I like to whenever it rains.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM