Как заменить n-й символ в строке новым? - PullRequest
0 голосов
/ 05 января 2019

Меня попросили написать класс, который кодирует данное предложение с использованием определенных правил. Этот класс должен использовать циклы и Stringbuffer. Правила таковы:

  • Каждая точка '.' заменяется на '*'.
  • Каждый третий символ (если этот символ не является пробелом или точкой) должны быть устранены.
  • Добавить в конце нового предложения число, представляющее общее число выбывших персонажей.

Я написал код, но не могу понять, почему он не работает. Кто-нибудь может помочь?

Например:

предложение = "Кэти любит наблюдать за природой."

Должен быть преобразован в:

"Kaie iks t obere ntue * 8"

Однако, используя мой код, я получаю: "Кэти любит наблюдать за природой *."

Спасибо!

public void createEncodedSentence() {

    StringBuffer buff = new StringBuffer();
    int counter = 0;
    char a;

    for (int i = 0; i < sentence.length(); i++) {
        a = sentence.charAt(i);

        if (a == '.') {
            buff.append('*');
        }
        if (a != ' ' && a != '.') {
            counter++;
        }
        if (counter % 3 == 0) {
            buff.append("");
        }
        buff.append(sentence.charAt(i));


    }

    encodedSentence = buff.toString();

}

1 Ответ

0 голосов
/ 05 января 2019

Основная проблема с вашей логикой заключается в том, что после добавления String к buff вы продолжаете эту итерацию вместо перехода к следующему символу в строке.

Измените ваш метод следующим образом:

public static StringBuffer createEncodedSentence(String sentence) {

    StringBuffer buff = new StringBuffer();
    int counter = 0;
    char a;

    for (int i = 0; i < sentence.length(); i++) {
        a = sentence.charAt(i);
        if (a == '.') {
            buff.append("*");
            continue;
        }
        if ((i + 1) % 3 == 0 && a != ' ' && a != '.') {
            counter++;
            continue;
        }
        buff.append(sentence.charAt(i));
    }
    buff.append(counter);
    return buff;

}

Логика:

  • Если символ является ., тогда мы добавляем * и переходим к следующему символу в предложении.
  • Если это третий индекс, тогда мы увеличиваем счетчик и переходим к следующему символу.
  • В конце итерации цикла мы добавляем число символов , которые были заменены
...