java - 替换两个位置之间的字符串中的特定字符

标签 java replace stringbuffer

考虑以下字符串:

String str = "XFB_PART~\XFB_IDF~\XFB_MODE~0\XFB_LOCALITEM~\XFB_REMOTEITEM~\XFB_MSG~tool\ soundgarden~\ASYNCHRONOUS~0\BROADCAST~0\XFB_LOCALAGT~"

我想做的是将 XFB_MSGASYNCHRONOUS 之间的所有反斜杠替换为逗号(因此每次看到反斜杠时,都将其替换为逗号)。

这就是我所做的:

            stringBuffer = new StringBuffer(str);


            for (int i = stringBuffer.indexOf("XFB_MSG"); i<stringBuffer.indexOf("ASYNCHRONOUS"); i++){

                if(stringBuffer.charAt(i)=='\\'){
                    stringBuffer = stringBuffer.replace(i, i, ",");
                }
            }

问题是,一旦满足条件 if (stringBuffer.charAt(i)=='\\'),即使 i 更改值,编译器也会继续输入和替换 char,因此我会遇到不断插入逗号的无限循环:

XFB_PART~\XFB_IDF~\XFB_MODE~0\XFB_LOCALITEM~\XFB_REMOTEITEM~\XFB_MSG~tool,,,,,,,,\ soundgarden~\ASYNCHRONOUS~0\BROADCAST~0\XFB_LOCALAGT~

再次强调,目标是仅替换 XFB_MSGASYNCHRONOUS 之间的所有反斜杠,并保持字符串的其余部分不变。位置可以改变,这两个参数之间的值也可以改变。所以我必须像这样搜索它们并尝试找到一种方法用逗号替换它们之间的反斜杠。

知道为什么我会出现无限循环,如果您碰巧有更好的方法来做到这一点,请随时告诉我。

谢谢。

最佳答案

我改变了:

stringBuffer = stringBuffer.replace(i, i, ",");

至:

stringBuffer = stringBuffer.replace(i, i+1, ",");

现在它可以工作了。

但我仍然不明白为什么它现在可以工作以及为什么之前我有一个无限循环。

关于java - 替换两个位置之间的字符串中的特定字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60041425/

相关文章:

java - 转发类示例

Java 图形库

java - 在 Java 中将 StringBuffer 转换为字节数组

java - 如何比较 StringBuffer 对象是否相等

c# - 这个基本 Java 方法的等效 C# 方法是什么?

java - 使用 Spring security 和 JWT 在 REST 中使用 <img> 标签访问私有(private)图像

java构建器模式和变化的字段

python - 可以在 python 中创建类似 bash 的 shell,即 : Bash replacement?

javascript - 用其他子域替换子域名使用 JavaScript?

正则表达式用方括号替换括号