2014-04-04 2 views
0

나는 용어집 목록에 대해 자바 문자열을 검사하려고 시도하고 용어집 목록에있는 용어를 찾으면 태그와 함께 용어를 감싼다. 그러나 문제는 용어집 목록에 두 개의 용어가있는 경우 : "Sprint"및 "Sprint 0"다음에 코드는 Sprint 용어 만 선택하고 "Sprint 0"은 무시한다는 것입니다.다른 문자열의 끝에 다른 단어가있는 다른 문자열을 찾는 방법은 무엇입니까?

여기 여기 내 코드

private String findGlassayTerms(String response, List<Glossary> glossary) { 
    for (Glossary item : glossary) { 
     // check if response contains the term 
     if (StringUtils.contains(response, item.getTerm())) { 
      System.out.println(item.getTerm()); 
      response = StringUtils.replace(response, item.getTerm(), "<span class=" + item.getTerm() + ">" + item.getTerm() + "</span>"); 

     } 
    } 

    return response; 
} 

입니다 결과입니다

<span class=Sprint>Sprint</span> 0 is typically a one or two week period at the end of the Define phase. <br>In summary, <span class=Sprint>Sprint</span> 0 provides an opportunity. 
+4

용어집을 가장 길게 정렬하는 것은 어떻습니까? – Axel

+0

어떻게 도움이 될 수 있습니까? – user261002

+0

글쎄, 당신은'Sprint' 전에'Sprint 0'을 대체하려고합니다. 왜냐하면 후자가 더 짧기 때문입니다. – Thomas

답변

1

당신이 분류하는 경우가 임기 길이 (첫 번째 최장 기간)에 의해 List<Glossary> glossary, 현재 코드가 제대로 작동합니다. 또 다른 해결책은 모든 성냥의 명부를 건설하고, 그 후에 정확한 성냥을 "득점하기 위하여"그 (것)들을 통해서 반복하기위한 것일 것입니다. 다음으로, 메서드의 이름을 findGlossaryTerms으로 바꾸어야한다고 생각합니다 (아니라 findGlassayTerms). 마지막으로, (코드의) 정렬은 다음과 같을 수 있습니다. -

Collections.sort(glossary, new Comparator<Glossary>() { 
    public int compare(Glossary a, Glossary b) { 
     if (a == null) { 
      if (b == null) { 
       return 0; 
      } 
      return -1; 
     } else if (b == null) { 
      return 1; 
     } 
     int av = (a.getTerm() != null) ? a.getTerm().length() : 0; 
     int bv = (b.getTerm() != null) ? b.getTerm().length() : 0; 
     return Integer.valueOf(bv).compareTo(av); 
    } 
}); 
+0

나는 당신의 코드를 사용하고있다. 그러나 나는 왜 그것이 짧은 것부터 길게 소트하는지 알지 못한다. – user261002

+1

@ user261002 메서드의 마지막 줄을 확인하십시오.이 함수는'return Integer.valueOf (bv) .compareTo (av); '이어야합니다. 편집 했으므로 이전 버전 일 수 있습니다. –

관련 문제