Замена указанного c Char из строки между двумя позициями - PullRequest
1 голос
/ 03 февраля 2020

Рассмотрим следующую строку:

String str = "XFB_PART~\XFB_IDF~\XFB_MODE~0\XFB_LOCALITEM~\XFB_REMOTEITEM~\XFB_MSG~tool\ soundgarden~\ASYNCHRONOUS~0\BROADCAST~0\XFB_LOCALAGT~"

Я хотел бы заменить все обратные косые черты между XFB_MSG и ASYNCHRONOUS запятыми (поэтому каждый раз, когда вы видите обратную косую черту sh, замените его запятой).

Вот что я сделал:

            stringBuffer = new StringBuffer(str);


            for (int i = stringBuffer.indexOf("XFB_MSG"); i<stringBuffer.indexOf("ASYNCHRONOUS"); i++){

                if(stringBuffer.charAt(i)=='\\'){
                    stringBuffer = stringBuffer.replace(i, i, ",");
                }
            }

Проблема в том, что при выполнении условия if (stringBuffer.charAt(i)=='\\') компилятор продолжает вводить и заменять символ, даже когда я меняю значение, и в результате я получаю бесконечное число l oop с постоянно вставляемыми запятыми:

XFB_PART~\XFB_IDF~\XFB_MODE~0\XFB_LOCALITEM~\XFB_REMOTEITEM~\XFB_MSG~tool,,,,,,,,\ soundgarden~\ASYNCHRONOUS~0\BROADCAST~0\XFB_LOCALAGT~

Еще раз, цель состоит в том, чтобы заменить только обратную косую черту между XFB_MSG и ASYNCHRONOUS и оставшуюся часть строки нетронутой. Позиции могут меняться, как и значения между этими двумя параметрами. Поэтому я должен искать их таким образом и пытаться найти способ заменить обратные слеши между ними запятыми.

Любая идея, почему у меня бесконечное число l oop, и если у вас есть лучший способ сделать это, пожалуйста, не стесняйтесь, дайте мне знать.

Спасибо.

1 Ответ

0 голосов
/ 03 февраля 2020

Я изменил:

stringBuffer = stringBuffer.replace(i, i, ",");

на:

stringBuffer = stringBuffer.replace(i, i+1, ",");

и теперь он работает.

Но я до сих пор не понимаю, почему он работает сейчас и почему раньше у меня был бесконечный l oop.

...