如何插入'*';在'之前;S';和'*';在'之后;S';在StringBufferJava中

如何插入'*';在'之前;S';和'*';在'之后;S';在StringBufferJava中,java,arrays,stringbuffer,Java,Arrays,Stringbuffer,如何在S之前插入*,在S之后插入* StringBufferJava StringBuffer textInFile= new StringBuffer ("Stanford "); public void convertToPTD(PlainTextDocument ptd) { if(ptd.textInFile.charAt(i)=='S') { ptd.textInFile.......??? }

如何在
S
之前插入
*
,在
S
之后插入
*
StringBufferJava

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”替换为“*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。

使用
.replace
方法。例如:

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

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

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

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

所以您想用
*S*
替换
S
的所有实例吗?请不要使用StringBuffer,它在十多年前被StringBuilder替换。@PeterLawrey“已替换”?另一个动词可能更切中要害。@La comadreja当然不是-这将在javadoc中显示。@La comadreja没有被弃用,但javadoc说“从JDK 5版开始,这个类已经被一个为单线程StringBuilder设计的等效类所补充。通常应优先使用StringBuilder类,因为它支持所有相同的操作,但速度更快,因为它不执行同步。“这个问题是关于StringBuffer而不是字符串。在替换后,这是否会有引用错误索引的风险?不会,因为我们正在查看每个旧索引的新位置。