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

标签 java stringbuffer

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

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

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

例如:

sentence = "Katie likes to observe nature."

应将其转换为:

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

}

最佳答案

逻辑的主要问题是,在将字符串附加到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;

}

逻辑:

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

关于java - 如何用新字符替换字符串中的第 n 个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54052013/

相关文章:

java - “ hive 上的 Spark ”-原因:java.lang.ClassNotFoundException:org.apache.hive.spark.counter.SparkCounters

java - 你如何实例化一个内部类并实现一个额外的接口(interface)

java - 不可变性实际上是如何在 String 类中实现的,而可变性在 StringBuffer 和 StringBuilder 中的代码中又是如何实现的呢?

java - 这段简单的代码有多复杂?

java - 为什么 StringBuilder 比 StringBuffer 慢?

java - 使用类定位标签元素

java - 为什么正则表达式无法识别行的开头?

java - 为什么不让 StringBuilder 和 StringBuffer 实现一个公共(public)接口(interface)呢?

java - 尝试使用数组构建 stringBuffer

java - 从sql数据库中的多个表中提取数据