我希望有一个匹配括号数的字符串。所以,我算一下开括号和近括号的数量。然后,我想用空char替换额外的那些但实际上我不能在java中使用replace方法,因为除非你只想要第一个,否则它不接受数字的任何限制。有什么想法吗?
例如:((A) - >(A)或(A)) - > (A)
这是我的代码,但目前使用的是replace()方法,替换所有打开或关闭的括号,而不是特定的次数。
int count1 = str.length() - str.replace("(", "").length();
int count2 = str.length() - str.replace(")", "").length();
if (count1 == count2)
return str;
else if (count1 > count2){
str = str.replace("(", "");
return str;
}
else if (count2 > count1){
str = str.replace(")", "");
return str;
}
答案 0 :(得分:0)
建议使用一对循环代替方法,如替换将括号固定为顺序pmatters。考虑一个字符串,如"A)("
,虽然它具有正确的括号数,但它仍然无效。
String fixParen(String str) {
StringBuilder sb = new StringBuilder(str);
int openCount = 0;
for(int i=0;i<sb.length();i++){
switch(sb.charAt(i)){
case '(': ++openCount; break;
case ')': if(openCount==0){
sb.replace(i, i+1, "");
continue;
}else{
--openCount;
}
}
}
int closedCount =0;
for(int i=sb.length()-1;i>=0;i--){
switch(sb.charAt(i)){
case ')': ++closedCount; break;
case '(': if(closedCount==0){
sb.replace(i,i+1,"" );
continue;
}else{
--closedCount;
}
}
}
return sb.toString();
}