2010-12-14 2 views
0

누군가 이것이 왜 infinte 루프인지 알 수 있습니까? 당신이 당신의 body 문자열을 변경하지 않기 때문에indexof를 사용하여 문자열의 패턴 찾기

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

내가 선택한 대답이 더 나은 해결책이라고 생각하기 때문에. previousIndex를 1 씩 늘리면, 찾고있는 패턴은 6 자의 characaters이므로 6이 더 좋습니다. 따라서 솔루션 권고와 같은 다음 5자를 확인할 필요가 없습니다. 이게 무슨 뜻입니까? – Vincent

+0

실제로는 아닙니다. 하나를 증가시킴으로써, 당신이 찾고있는 패턴은 문자열의 시작 부분에서 발견되지 않을 것입니다. 따라서 당신은 문제가 해결 될 것입니다. 간단히 말하면 검색은 "br />"에서 시작하며 "
"을 찾고 있으므로 다음 번에 "
"이 나올 때까지 찾으실 수 없습니다. 선택한 솔루션이 반복 할 때마다 패턴의 크기를 불필요하게 계산합니다. – aligf

+0

네, 다시 발생을 발견하지 못 하겠지만, 여전히 "br />"을 체크합니다. 단지 6을 더하면, 보지 않고 시작합니다. 하지만 실제로 저는 두 가지 대답을 모두 골랐습니다. 왜냐하면 당신은 더 빨리 nr을 더하기 때문에 BR의 크기를 계산하기 때문에 당신이 말했듯이 & 그의 것 때문에 1 대신에 6을 더하는 것이 조금 빠릅니다. – Vincent

답변

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()); 
    } 
1

, 그래서 indexOf 항상 문자열이 body에 포함되어 있기 때문에 -1 서로 다른 인덱스를 반환합니다.

루프 끝 부분에 body = body.substring(index);을 추가하여이를 수정하십시오.

3

변경 마지막 줄에 :

previousIndex = index + 1; 
1

이이 문제를 해결해야합니다

previousIndex=index + 1; 

그렇지 않으면 당신은 항상 패턴의 첫 번째 occurance를 찾을 수 있습니다.

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

이것은 최고의 솔루션이 될 것이지만, j2me는 제한된 librairy와 작동합니다 (String에는 split 메소드가 없습니다) – Vincent

관련 문제