使用Java从字符串缓冲区中删除子字符串
每次出现子字符串时,我都想从字符串缓冲区中删除子字符串,目前为止我所做的是:使用Java从字符串缓冲区中删除子字符串,java,stringbuffer,Java,Stringbuffer,每次出现子字符串时,我都想从字符串缓冲区中删除子字符串,目前为止我所做的是: public static void main(String[] args) { String text = "Alice Bob Alice Bob Alice Bob"; String substr = "Alice"; StringBuffer strbuf = new StringBuffer(text); strbu
public static void main(String[] args) {
String text = "Alice Bob Alice Bob Alice Bob";
String substr = "Alice";
StringBuffer strbuf = new StringBuffer(text);
strbuf.indexOf(substr);
strbuf.lastIndexOf(substr);
while (strbuf != null) {
strbuf.delete(strbuf.indexOf(substr), strbuf.indexOf(substr) + substr.length());
System.out.println(strbuf.toString());
}
}
我想删除所有出现的“Alice”。但它给出了以下错误:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
我认为错误在while行。
有什么想法吗?因为如果
文本
不包含substr
,索引返回-1
,您可以使用-1
调用删除
然后循环继续,直到strbuf为!=空
:这是永远的
在您的情况下,当您删除所有出现的substr
时,它会抛出一个异常,下一个indexOf
返回-1
用这种方式改变你的循环
int i;
while ((i = strbuf.indexOf(substr)) != -1)
strbuf.delete(i, i + substr.length());
因为如果文本
不包含substr
,则索引
返回-1
,您可以使用-1
调用delete
然后循环继续,直到strbuf为!=空
:这是永远的
在您的情况下,当您删除所有出现的substr
时,它会抛出一个异常,下一个indexOf
返回-1
用这种方式改变你的循环
int i;
while ((i = strbuf.indexOf(substr)) != -1)
strbuf.delete(i, i + substr.length());
您应该检查子字符串是否是字符串的一部分
int pos = strbuf.indexOf(substr);
if (pos < 0) { // not found...
应该有一个更好的版本
String text = "Alice Bob Alice Bob Alice Bob";
String substr = "Alice";
StringBuffer strbuf = new StringBuffer(text);
while (true) {
int pos = strbuf.indexOf(substr);
if (pos < 0) break; // ready
strbuf.delete(pos, pos + substr.length());
System.out.println(strbuf.toString());
}
String text=“Alice-Bob-Alice-Bob”;
字符串substr=“Alice”;
StringBuffer strbuf=新的StringBuffer(文本);
while(true){
int pos=strbuf.indexOf(substr);
如果(位置<0)中断;//准备就绪
strbuf.delete(pos,pos+substr.length());
System.out.println(strbuf.toString());
}
您应该检查子字符串是否是字符串的一部分
int pos = strbuf.indexOf(substr);
if (pos < 0) { // not found...
应该有一个更好的版本
String text = "Alice Bob Alice Bob Alice Bob";
String substr = "Alice";
StringBuffer strbuf = new StringBuffer(text);
while (true) {
int pos = strbuf.indexOf(substr);
if (pos < 0) break; // ready
strbuf.delete(pos, pos + substr.length());
System.out.println(strbuf.toString());
}
String text=“Alice-Bob-Alice-Bob”;
字符串substr=“Alice”;
StringBuffer strbuf=新的StringBuffer(文本);
while(true){
int pos=strbuf.indexOf(substr);
如果(位置<0)中断;//准备就绪
strbuf.delete(pos,pos+substr.length());
System.out.println(strbuf.toString());
}
您的问题是试图删除不存在的子字符串(在您删除了它的所有实例之后)。您必须将循环边界更改为
while(strbuf != null && strbuf.indexOf(substr) != -1)
您的问题是您试图删除不存在的子字符串(在您删除了它的所有实例之后)。您必须将循环边界更改为
while(strbuf != null && strbuf.indexOf(substr) != -1)
您得到的是-1,因为找不到该字符串,您需要更改条件以检查是否已首先找到该字符串,然后尝试将其删除您得到的是-1,因为找不到该字符串,您需要更改条件以检查是否已首先找到该字符串,然后尝试删除它这是因为一旦从stringbuffer中删除字符串“Alice”,您将无法再次找到它!!因此,您的indexOf()方法将返回-1,因此您将获得java.lang.StringIndexOutOfBoundsException,因为一旦您从stringbuffer中删除字符串“Alice”,您将无法再次找到它!!因此,您的indexOf()方法将返回-1,因此您将获得java.lang.StringIndexOutOfBoundsException您是否考虑过只使用String#replaceAll(String old,String new”)?text.replaceAll(“Alice”,“new”)“strbuf
何时将成为null
?您的while循环将永远运行。您是否考虑过只使用String#replaceAll(String old,String new”)?text.replaceAll(“Alice”,即“”);strbuf
何时将null
?你的while循环将永远消失。