Java 我怎样才能找到全部;)并将其替换为“(”;?

Java 我怎样才能找到全部;)并将其替换为“(”;?,java,Java,给我一个字符串,我想用一个字符串替换所有连续出现的开括号 ((5))→ (5) ((5)))→ (5) 我试过了 str = str.replaceAll("((", "("); 得到了正则表达式pattern错误 然后我试着 str = str.replaceAll("\\((", "("); str = str.replaceAll("\\\\((", "("); 然后我试着 str = str.replaceAll("\\((", "("); str = str.replace

给我一个字符串,我想用一个字符串替换所有连续出现的开括号

  • ((5))
    → <代码>(5)
  • ((5)))
    → <代码>(5)
我试过了

str = str.replaceAll("((", "(");
得到了正则表达式pattern错误 然后我试着

str = str.replaceAll("\\((", "(");
str = str.replaceAll("\\\\((", "(");
然后我试着

str = str.replaceAll("\\((", "(");
str = str.replaceAll("\\\\((", "(");
我总是遇到同样的错误!

你试过这个吗

str = str.replaceAll("\\({2,}", "(");
“\”是转义字符,因此每个特殊字符都必须由它来处理。如果没有转义字符,正则表达式将其读取为用于分组的开括号,并且需要一个闭括号

编辑:起初,我以为他想精确匹配2个,你试过这个吗

str = str.replaceAll("\\({2,}", "(");
“\”是转义字符,因此每个特殊字符都必须由它来处理。如果没有转义字符,正则表达式将其读取为用于分组的开括号,并且需要一个闭括号


编辑:最初,我认为他试图精确匹配2个

您需要对每个括号进行转义,并添加
+
以说明连续出现的情况:

str = str.replaceAll("\\(\\(+","(");

您需要对每个括号进行转义并添加
+
,以说明连续出现的情况:

str = str.replaceAll("\\(\\(+","(");

我不确定括号是固定的还是动态的,但假设它们可能是动态的,您可以在这里使用
replaceAll
,然后使用
String.Format
来格式化字符串

希望能有帮助

public class HelloWorld{

 public static void main(String []args){

    String str = "((((5))))";
    String abc = str.replaceAll("\\(", "").replaceAll("\\)","");
    abc =  String.format("(%s)", abc);
    System.out.println(abc);

 }
}
输出:(5)


我用
((5))
((5))
尝试了上面的代码,它产生了相同的输出。

我不确定括号是固定的还是动态的,但假设它们可能是动态的,您可以在这里使用
replaceAll
然后使用
String.Format
来格式化字符串

希望能有帮助

public class HelloWorld{

 public static void main(String []args){

    String str = "((((5))))";
    String abc = str.replaceAll("\\(", "").replaceAll("\\)","");
    abc =  String.format("(%s)", abc);
    System.out.println(abc);

 }
}
输出:(5)


我用
((5))
((5))
尝试了上面的代码,它产生了相同的输出。

假设括号不需要配对,例如
((5))
应该变成
(5)
,那么以下操作就可以了:

str = str.replaceAll("([()])\\1+", "$1");
试验

输出

(5)
(5)
(5)
(5)
解释

(启动捕获组
[()]匹配一个“(”或“)”。在字符类中,“(”和“)”
没有特别的意义,所以他们不需要逃走
)结束捕获组,即捕获匹配的“(”或“)”
\1+匹配捕获组#1.中的一个或多个文本作为
Java字符串文字,转义了“\”(加倍)
$1替换为来自捕获组的文本#1

另请参见演示。

假设括号不需要配对,例如,
(((5))
应变为
(5)
,则以下操作即可:

str = str.replaceAll("([()])\\1+", "$1");
试验

输出

(5)
(5)
(5)
(5)
解释

(启动捕获组
[()]匹配一个“(”或“)”。在字符类中,“(”和“)”
没有特别的意义,所以他们不需要逃走
)结束捕获组,即捕获匹配的“(”或“)”
\1+匹配捕获组#1.中的一个或多个文本作为
Java字符串文字,转义了“\”(加倍)
$1替换为来自捕获组的文本#1

另请参见演示。

@AndrewBoards现在我遇到了一个新错误,“无效的转义序列…”如果有3个连续的括号,这将不起作用。结果将是2个括号。您更改了答案,因为它不起作用,现在您有了来自@Andreas注释的代码!!!@AndrewBoards现在我遇到了一个新错误,“无效的转义序列…”如果有3个连续的括号,则此操作不起作用。结果将是2个括号。您在第3次更改了答案,因为它不起作用,现在您有了@Andreas注释中的代码!!!您也可以使用
replaceAll(\\({2,}),“(”)
,即匹配2个或多个开括号。除了使用
+
,您还可以使用
replaceAll(“\\({2,})”,“(”
),即匹配2个或多个开括号。这应该是测试用例的可接受答案+1。这应该是测试用例的可接受答案+1