考虑以下字符串:
String str = "XFB_PART~\XFB_IDF~\XFB_MODE~0\XFB_LOCALITEM~\XFB_REMOTEITEM~\XFB_MSG~tool\ soundgarden~\ASYNCHRONOUS~0\BROADCAST~0\XFB_LOCALAGT~"
我想做的是将 XFB_MSG
和 ASYNCHRONOUS
之间的所有反斜杠替换为逗号(因此每次看到反斜杠时,都将其替换为逗号)。
这就是我所做的:
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_MSG
和 ASYNCHRONOUS
之间的所有反斜杠,并保持字符串的其余部分不变。位置可以改变,这两个参数之间的值也可以改变。所以我必须像这样搜索它们并尝试找到一种方法用逗号替换它们之间的反斜杠。
知道为什么我会出现无限循环,如果您碰巧有更好的方法来做到这一点,请随时告诉我。
谢谢。
最佳答案
我改变了:
stringBuffer = stringBuffer.replace(i, i, ",");
至:
stringBuffer = stringBuffer.replace(i, i+1, ",");
现在它可以工作了。
但我仍然不明白为什么它现在可以工作以及为什么之前我有一个无限循环。
关于java - 替换两个位置之间的字符串中的特定字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60041425/