Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用indexof查找字符串中的模式_Java_Java Me - Fatal编程技术网

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(索引)来修复该问题。

因为您不更改
正文
字符串,所以
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,这要快一点。