如何用新字符替换字符串中的第 n 个字符?

How do I replace nth character in a String with a new character?

我被要求写一个 class 来使用特定规则对给定的句子进行编码。这个 class 应该使用循环和 Stringbuffer。规则是:

我写了代码,但我不明白为什么它不起作用。有人可以帮忙吗?

例如:

sentence = "Katie likes to observe nature."

应该转化为:

"Kaie iks t obere ntue*8"

但是,使用我的代码我得到: "Katie likes to observe nature*."

谢谢!

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();

}

您的逻辑的主要问题是,在将 String 附加到 buff 之后,您继续进行 that 迭代跳转到字符串中的下一个字符。

将您的方法更改为如下:

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;

}

逻辑:

  • 如果字符.,那么我们附加一个*并跳转到句子中的下一个字符。
  • 如果它是第 3 个索引,那么我们递增计数器并跳转到下一个字符。
  • 在for循环迭代结束时,我们添加 字符已被替换