【发布时间】:2020-02-03 14:39:06
【问题描述】:
考虑以下字符串:
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)=='\\'),即使我更改值,编译器也会继续输入和替换字符,结果我得到一个不断插入逗号的无限循环:
XFB_PART~\XFB_IDF~\XFB_MODE~0\XFB_LOCALITEM~\XFB_REMOTEITEM~\XFB_MSG~tool,,,,,,,,\ soundgarden~\ASYNCHRONOUS~0\BROADCAST~0\XFB_LOCALAGT~
再一次,目标是只替换XFB_MSG 和ASYNCHRONOUS 之间的所有反斜杠,并保持字符串的其余部分不变。位置可以改变,这两个参数之间的值也可以改变。所以我必须像那样搜索它们并尝试找到一种方法将它们之间的反斜杠替换为逗号。
知道为什么我会有一个无限循环,如果你碰巧有更好的方法来做到这一点,请随时告诉我。
谢谢。
【问题讨论】:
-
您可能想使用String.replace。比如:
int start = str.indexOf("XFB_MSG"); int end = str.indexOf("ASYNCHRONOUS"); str = str.substring(0, start) + str.substring(start, end).replace('\\', ',') + str.substring(end); -
谢谢。您的方法更好更简单,甚至不必使用 StringBuffer。
标签: java replace stringbuffer