【问题标题】:how to insert '*' before 'S' and '*' after 'S' in StringBuffer javajava - 如何在StringBuffer java中的'S'之前和'S'之后插入'*'
【发布时间】:2015-04-27 17:02:05
【问题描述】:

如何在S 之前插入* 和在S 之后插入* 字符串缓冲区Java?

StringBuffer textInFile= new StringBuffer ("Stanford ");
public void convertToPTD(PlainTextDocument ptd)
    {

            if(ptd.textInFile.charAt(i)=='S')
{
        ptd.textInFile.......???
        }
            System.out.println(ptd.textInFile);

        return;

    }

【问题讨论】:

  • 所以你想用*S*替换S的所有实例?
  • 请不要使用StringBuffer,十多年前就被StringBuilder取代了。
  • @PeterLawrey “替换”?另一个动词可能更重要。
  • @La-comadreja 当然不是 - 这会在 javadoc 中显示。
  • @La-comadreja Not \@Deprecated 但 Javadoc 说“从 JDK 5 开始,这个类已经补充了一个为单线程使用而设计的等效类 StringBuilder。StringBuilder 类应该通常优先使用这个,因为它支持所有相同的操作,但速度更快,因为它不执行同步。”

标签: java arrays stringbuffer


【解决方案1】:

使用.replace 方法。一个例子:

char c = '*';
String s = "S";
String str = "Stanford";
String rep = str.replace(s, c + s + c);

【讨论】:

  • 这个问题是关于 StringBuffer 而不是字符串。
【解决方案2】:

您的第一步是找到“S”所在的索引列表。

您的第二步是,对于每个索引,将“S”替换为“*S*”。

方法如下:

int i = -1;
while (true) {
    i = buffer.indexOf(i + 1, "S");
    if (i == -1) break; // No more occurrences of "S" are found
    buffer = buffer.replace(i, i + 1, "*S*");
}

如果在我们正在查看的字符串部分中没有出现我们想要的子字符串,则 indexOf() 返回 -1。

【讨论】:

  • 替换后是否存在引用错误索引的风险?
  • 不,因为我们正在查看每个旧索引的新位置。
【解决方案3】:

您可以递归地使用它来满足您的需求。

下面是我在我的机器上测试过的一段代码。希望它对你有用:

StringBuffer str = new StringBuffer("WhereStanford");
str = str.replace(str.indexOf("S", 0), str.indexOf("S", 0)+1, "*S*");

【讨论】:

    猜你喜欢
    • 2011-06-18
    • 2014-02-14
    • 1970-01-01
    • 2011-03-15
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多