在String Java中替换字符特定的次数

时间:2013-12-27 21:59:09

标签: java string replace

我希望有一个匹配括号数的字符串。所以,我算一下开括号和近括号的数量。然后,我想用空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;
        }

1 个答案:

答案 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();
    }