Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何删除Java字符串中嵌入的大括号?_Java_Regex_String_Replaceall - Fatal编程技术网

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

如何删除Java字符串中嵌入的大括号?,java,regex,string,replaceall,Java,Regex,String,Replaceall,我有一个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." 这些对可以出现在字符串中的任何位置,也可能根本不会出现。显然这里有一个字符串#replaceAll(someRe

我有一个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."
这些对可以出现在字符串中的任何位置,也可能根本不会出现。显然这里有一个
字符串#replaceAll(someRegex,“”
,但我似乎无法正确理解
someRegex

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

有什么想法吗?提前感谢。

要匹配
{
,您需要对其进行转义。因为它在正则表达式中有一些特殊的含义。因此,您需要
\{
\}
。或者您也可以将它们包含在字符类中

然后要匹配它们之间的任何内容,可以使用
*
点(.)
匹配任何字符。
*
是一个量词,表示匹配
0或更多

因此,您的正则表达式是:-

\\{.*?\\}  
或:-

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

另外,一个特殊的正则表达式元字符,在
字符类
-即
[]
中使用时没有特殊意义。这就是为什么,当你这样使用它时,你不需要逃避它们。因此出现了第二个正则表达式

这看起来很简单,不是吗?好的,现在是学习有关
正则表达式的更多教程的时候了。你可以从

replaceAll(“\{.*.\},”)开始。
应该做这项工作

String stripped = "My name is {name}. I am a {animal}. I like to {activity} whenever it rains.".replaceAll("\\{.*?\\}", "");
System.out.println(stripped);
打印
我的名字是。我是一个。每当下雨的时候我都喜欢去。

尝试使用最简单的正则表达式
\{\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
一起包含。

到目前为止,您得到了什么?没那么难。您当然应该试一试。@RohitJain-请查看我的更新以获得最佳(不成功)尝试。可能需要使用。*而不是*,因为它是一个表示零或更多{后跟}的regexp,您可能需要“{.*}”@SwapnilS:您可能需要重新阅读完整的文档解释。您通常不必在正则表达式中转义
{}
,除非它们包含数字。这里有一些样本:@Lindrian。嗯,你说得对。在某些地方,我自己觉得没有必要逃避他们。我有时会对此感到困惑。这就是为什么我更喜欢对特殊字符使用
字符类
    String s  = "My name is {name}. I am a {animal}. I like to {activity} "+
                "whenever it rains.";
    System.out.println(s.replaceAll("\\{\\w*\\}", ""));