Индекс путаницы после удаления символа в Stringbuilder - Java - PullRequest
0 голосов
/ 11 июня 2018
public static String RemoveChar(String s,char a,char b)
    {
        StringBuilder sb = new StringBuilder(s);
        for(int i=0;i < sb.length();i++)
        {
            if(sb.charAt(i)==a || sb.charAt(i)==b)
            {   System.out.println("Characters removed are : "+a+" "+b);
                System.out.println("Removed character at "+i+" : "+s.charAt(i));
                sb.deleteCharAt(i);

            }
        }
        return sb.toString();
    }



    **Input** :  RemoveChar("beabeefeab",'a','b');
    **Output** : Characters removed are : a b
    Removed character at 0 : b
    Characters removed are : a b //It checks if the character at the index is a or b
    Removed character at 1 : e //after it passes the if condition it removes e.Why does this happen? What alternative can i do for this?
    Characters removed are : a b
    Removed character 6 : f
    ebeefeb

Я новичок в stringbuilder и java, так что извините, если это глупый вопрос. Предложите альтернативу и скажите, что здесь пошло не так. Это было бы очень полезно для этого новичка:)

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

После удаления символа с индексом i символ, который использовал , чтобы находиться в позиции i + 1, теперь находится в позиции i, а символ, который раньше был в i + 2сейчас на i + 1.После этого вы увеличиваете i, поэтому вы смотрите на символ, который раньше был в индексе i + 2, и пропускаете символ с индексом i+1.

Простые решения включают в себя итерацию в обратном направлении или выполнениеi-- внутри вашего if.

0 голосов
/ 11 июня 2018

При вызове deleteCharAt вы удаляете символ с индексом i, который сдвигает остальные символы влево на одну позицию.Поэтому в этом случае не следует увеличивать счетчик индекса i на единицу.

Попробуйте это

for(int i=0; i < sb.length() ; )
    {
        if(sb.charAt(i)==a || sb.charAt(i)==b)
        {   System.out.println("Characters removed are : "+a+" "+b);
            System.out.println("Removed character at "+i+" : "+sb.charAt(i));
            sb.deleteCharAt(i);
        } else {
           i++;
        }
    }
...