Java 使用indexof查找字符串中的模式
有人能告诉我为什么这是一个内循环吗Java 使用indexof查找字符串中的模式,java,java-me,Java,Java Me,有人能告诉我为什么这是一个内循环吗 private void splitBody() { bodyparts=new Vector(); String body = "<br />testtestest<br />fefefefefefefefefef<br />qqqqqqqqqqqq"; int previousIndex=0; while(body.indexOf("<br /
private void splitBody() {
bodyparts=new Vector();
String body = "<br />testtestest<br />fefefefefefefefefef<br />qqqqqqqqqqqq";
int previousIndex=0;
while(body.indexOf("<br />",previousIndex)!=-1) {
int index=body.indexOf("<br />",previousIndex);
System.out.println(body.substring(previousIndex, index));
bodyparts.addElement(body.substring(previousIndex, index));
previousIndex=index;
}
}
private void splitBody(){
bodyparts=新向量();
字符串正文=“
testtestest
fefefef
qqqqq”;
int-previousIndex=0;
while(body.indexOf(“
”,previousIndex)!=-1){
int index=body.indexOf(“
”,前一个索引);
System.out.println(body.substring(previousIndex,index));
bodyparts.addElement(body.substring(previousIndex,index));
previousIndex=指数;
}
}
因为您不更改正文
字符串,所以索引of
总是返回一个与-1
不同的索引,因为子字符串包含在正文
中
添加
body=body.substring(索引)在循环结束时使用code>来修复该问题。因为您不更改正文
字符串,所以indexOf
总是返回一个与-1
不同的索引,因为子字符串包含在正文
中
添加body=body.substring(索引)在循环结束时编码>以修复该问题。将最后一行更改为:
previousIndex = index + 1;
将最后一行更改为:
previousIndex = index + 1;
这将解决问题:
previousIndex=index + 1;
否则,你总是会发现第一次出现的模式
或者-简化整个过程:
String[] parts = body.split("<br />");
String[]parts=body.split(
);
这应该可以解决问题:
previousIndex=index + 1;
否则,你总是会发现第一次出现的模式
或者-简化整个过程:
String[] parts = body.split("<br />");
String[]parts=body.split(
);
操作索引返回起始位置。如果要向前移动,请按如下方式递增previousIndex
bodyparts=new Vector();
String body = "<br />testtestest<br />fefefefefefefefefef<br />qqqqqqqqqqqq";
int previousIndex=0;
while(body.indexOf("<br />",previousIndex)!=-1) {
int index=body.indexOf("<br />",previousIndex);
System.out.println(body.substring(previousIndex, index));
bodyparts.addElement(body.substring(previousIndex, index));
previousIndex=index+("<br />".size());
}
bodyparts=新向量();
字符串正文=“
testtestest
fefefef
qqqqq”;
int-previousIndex=0;
while(body.indexOf(“
”,previousIndex)!=-1){
int index=body.indexOf(“
”,前一个索引);
System.out.println(body.substring(previousIndex,index));
bodyparts.addElement(body.substring(previousIndex,index));
previousIndex=index+(“
”.size());
}
操作索引返回起始位置。如果要向前移动,请按如下方式递增previousIndex
bodyparts=new Vector();
String body = "<br />testtestest<br />fefefefefefefefefef<br />qqqqqqqqqqqq";
int previousIndex=0;
while(body.indexOf("<br />",previousIndex)!=-1) {
int index=body.indexOf("<br />",previousIndex);
System.out.println(body.substring(previousIndex, index));
bodyparts.addElement(body.substring(previousIndex, index));
previousIndex=index+("<br />".size());
}
bodyparts=新向量();
字符串正文=“
testtestest
fefefef
qqqqq”;
int-previousIndex=0;
while(body.indexOf(“
”,previousIndex)!=-1){
int index=body.indexOf(“
”,前一个索引);
System.out.println(body.substring(previousIndex,index));
bodyparts.addElement(body.substring(previousIndex,index));
previousIndex=index+(“
”.size());
}
这将是最好的解决方案,但j2me适用于有限的库(字符串没有拆分方法)。这将是最好的解决方案,但j2me适用于有限的库(字符串没有拆分方法),因为我认为我选择的答案是更好的解决方案。您将前面的索引增加为1,而6更好,因为我要查找的模式是6个字符长的。因此,您不需要像解决方案建议的那样检查接下来的5个字符。这有意义吗?实际上没有。通过增加1,您正在搜索的模式将不会在字符串的开头找到,因此您的问题将得到解决。简单地说,搜索将从“br/>”开始,您正在查找“
”,因此它在下一次出现“
”之前不会找到它。您选择的解决方案在每次迭代时都会不必要地计算模式的大小。是的,它不会再次找到发生的情况,但它仍会选中“br/>”,而当我刚刚添加6时,它不会,并开始查找。但实际上我选择了你的两个答案;你的是因为仅仅增加一个nr s比计算br的大小要快,就像你说的&他的是因为增加了6而不是1,这要快一点。因为我认为我选择的答案是一个更好的解决方案。您将前面的索引增加为1,而6更好,因为我要查找的模式是6个字符长的。因此,您不需要像解决方案建议的那样检查接下来的5个字符。这有意义吗?实际上没有。通过增加1,您正在搜索的模式将不会在字符串的开头找到,因此您的问题将得到解决。简单地说,搜索将从“br/>”开始,您正在查找“
”,因此它在下一次出现“
”之前不会找到它。您选择的解决方案在每次迭代时都会不必要地计算模式的大小。是的,它不会再次找到发生的情况,但它仍会选中“br/>”,而当我刚刚添加6时,它不会,并开始查找。但实际上我选择了你的两个答案;你的是因为仅仅增加一个nr s比计算br的大小要快,就像你说的&他的是因为增加了6而不是1,这要快一点。