4 回答
TA贡献1847条经验 获得超11个赞
你试过这个吗?
str = str.replaceAll("\\({2,}", "(");
'\' 是转义字符,因此每个特殊字符都必须以它开头。没有它们,正则表达式将其读取为用于分组的左括号,并期望有一个右括号。
编辑:最初,我以为他是想恰好匹配 2
TA贡献1712条经验 获得超3个赞
假设括号不需要配对,例如((((5))应该变成(5),那么下面的代码就可以了:
str = str.replaceAll("([()])\\1+", "$1");
测试
for (String str : new String[] { "(5)", "((5))", "((((5))))", "((((5))" }) {
str = str.replaceAll("([()])\\1+", "$1");
System.out.println(str);
}
输出
(5)
(5)
(5)
(5)
解释
( Start capture group
[()] Match a '(' or a ')'. In a character class, '(' and ')'
has no special meaning, so they don't need to be escaped
) End capture group, i.e. capture the matched '(' or ')'
\1+ Match 1 or more of the text from capture group #1. As a
Java string literal, the `\` was escaped (doubled)
$1 Replace with the text from capture group #1
另请参阅regex101.com以获取演示。
TA贡献1825条经验 获得超4个赞
我不确定括号是固定的还是动态的,但假设它们可能是动态的,你可以在这里做的是使用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))我用and尝试了上面的代码(((5))),它产生了相同的输出。
添加回答
举报