Поиск шаблона в строке с помощью indexof - PullRequest
0 голосов
/ 14 декабря 2010

Может кто-нибудь сказать мне, почему это бесконечный цикл?

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 ]

3 голосов
/ 14 декабря 2010

Изменить последнюю строку на:

previousIndex = index + 1;
1 голос
/ 14 декабря 2010

Операция indexOf возвращает начальную позицию.Если вы хотите двигаться вперед, увеличьте предыдущий индекс следующим образом.

  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());
  }
1 голос
/ 14 декабря 2010

Это должно решить проблему:

previousIndex=index + 1;

В противном случае вы всегда найдете первое вхождение шаблона.

Или - упростить все это:

String[] parts = body.split("<br />");
1 голос
/ 14 декабря 2010

Поскольку вы не меняете строку body, поэтому indexOf всегда возвращает индекс, отличный от -1, поскольку подстрока содержится в body.

Добавьте body = body.substring(index); в конце цикла, чтобы исправить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...