deleteCharAt()不会在循环

时间:2016-11-10 23:04:47

标签: stringbuilder

我需要从stringbuilder中删除某些字符,但由于某种原因,不会删除一对字符。这就是我到目前为止:我有一个字符串和arraylist作为参数的方法。我传递的字符串如下:" beabeefeab"并且arraylist包含以下6个长度为2的字符组合:ab,ae,af,be,bf,ef。带有组合的这个arraylist的名字是arrayListCombos,我在外面循环遍历这个arraylist for循环并得到这个字符串组合的各个字符,这样我就可以将各个字符与我的stringbuilder中的字符串char进行比较。 for循环内部是遍历stringbuilder并将modString.charAt(x)与从组合中获取的firstChar进行比较。例如,请看第一个组合ab,firstChar = a和secondChar = b。我可以删除字符串" beabeefeab"中的第一个e,但连续两个e不会被删除,我得到以下字符串:" babeeab"我应该得到" babab"删除除了a和b以外的所有内容。任何人都可以帮忙 - 我真的很感激。

    for(int w=0;w<arrayListCombos.size();w++){
        String tempComboToKeep = arrayListCombos.get(w);
        //split up char in combo and store independantly in order to compare
        char firstChar = tempComboToKeep.charAt(0);
        System.out.println("first char: "+firstChar);
        char secondChar = tempComboToKeep.charAt(1);
        System.out.println("second char: "+secondChar);
        StringBuilder modString = new StringBuilder(s);
        //System.out.println("here is stringbuilder before modify: "+modString.toString());
        //walk through stringbuilder to find the individual chars and remove rest
        for(int x=0;x<modString.length();x++){
            //if first char is NOT equal to one of the combos, delete it
            if (modString.charAt(x) != firstChar){
                System.out.println("char not equal to firstChar: "+modString.charAt(x)+"  "+firstChar);
                //the char inside stringbuilder does not equal either of the combo chars so need to be removed
                if (modString.charAt(x) != secondChar){
                    System.out.println("char not equal to secondChar either!!!  " +
                            "DELETE this char from string builder: "+modString.charAt(x));
                    modString.deleteCharAt(x);
                }
            }
        }

1 个答案:

答案 0 :(得分:0)

我发现了我的问题。我正在循环遍历stringbuilder,删除字符到这个stringbuilder并尝试在循环中使用这个修改过的stringbuilder来遍历所有字符。为了解决这个问题,我刚刚创建了一个新的stringbuilder并使用了append方法并在每次需要保留一个字符时附加,这使我能够继续使用原始的stringbuilder进行循环,这样我就不会错过任何字符。

相关问题