使用indexof在字符串中查找模式

时间:2010-12-14 14:33:14

标签: java java-me

有人能告诉我为什么这是一个无限循环吗?

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;
        }
    }

4 个答案:

答案 0 :(得分:3)

将最后一行更改为:

previousIndex = index + 1;

答案 1 :(得分:1)

由于您未更改body字符串,因此indexOf始终返回与-1不同的索引,因为子字符串包含在body中。

在循环结束时添加body = body.substring(index);以修复此问题。

答案 2 :(得分:1)

这应解决问题:

previousIndex=index + 1;

否则你总能找到第一次出现的模式。

或者 - 简化整个事情:

String[] parts = body.split("<br />");

答案 3 :(得分:1)

indexOf操作返回起始位置。如果你想继续前进,就像这样增加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());
  }