【问题标题】:How do I replace nth character in a String with a new character?如何用新字符替换字符串中的第 n 个字符?
【发布时间】:2019-01-05 12:30:28
【问题描述】:

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

  • 每个点 '.'将替换为“*”。
  • 每第三个字符(如果该字符不是空格或点) 应该被淘汰。
  • 在新句子的末尾添加一个代表总数的数字 被淘汰的角色。

我已经编写了代码,但我无法理解为什么它不起作用。有人可以帮忙吗?

例如:

sentence = "Katie 喜欢观察自然。"

应该转化为:

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

}

【问题讨论】:

  • 此外,“它不工作”是一个无用的描述。请详细描述问题。
  • Katie likes to observe nature. 的输出应该是 Kaie lies to obere atre*6

标签: java stringbuffer


【解决方案1】:

您的逻辑的主要问题是,在将 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;

}

逻辑:

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

【讨论】:

  • 非常感谢您的帮助。但为什么最后我们'返回buff'?我可以将其转换为字符串并存储在 newSentence 中吗?编码句子 = buff.toString();返回编码的句子;
  • 是的。您可以在buff 上致电.toString()。但是如果你这样做,你需要将方法的返回类型更改为String
  • // 如果我添加此代码,我会收到错误 buff.append(counter);编码句子 = buff.toString();返回编码的句子; // 错误:不能从静态引用非静态变量 encodedSentence
  • 我已在类中声明它,但在方法之外声明为私有字符串编码句子;
  • 那是因为您正在从静态方法访问非静态字段。使用private static String encodedSentence; 声明它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-24
  • 2017-12-01
  • 2021-04-27
  • 1970-01-01
  • 2021-09-26
  • 1970-01-01
  • 2016-05-07
相关资源
最近更新 更多