2011-01-04 5 views
3

내 웹 사이트에 버전 기록을 구현하고 싶습니다. 문자열 또는 개체 키를 비교하는 방법이 필요합니다. 예를 들어 :두 문자열 또는 개체 비교 및 ​​차이 가져 오기

는 원래 문자열/오브젝트 키 : 빠른 갈색 여우 게으른 토끼

개정 뛰어 넘었다 :

개정 된 문자열/오브젝트 키는 빠른 갈색 여우는 은 뛰어 넘었다 추가 된 내 시간 만 개정을 저장하려는

게으른 토끼 제거 어 이터 리 테이블. 어디서부터 시작해야할지 모르겠다. 그래서 어떤 아이디어라도 나에게 접근하거나 접근법에 대한 조언을 얻는 것이 정말 감사 할 것이다.

나는 find() 함수를 알고 있는데,이 함수는 주요 후보로 생각되지만, "도매"문자열을 비교하기 때문에 솔루션으로 시각화하는 방법을 알지 못합니다.

+0

@oragepips가 지적했듯이, 이것은 쉬운 문제는 아닙니다. 예를 들어, 귀하의 예에서는 "brown fox jumped ov"가 추가되고 "brown fox"가 삭제되고 "게으른 토끼"가 추가되었다고 말하는 것이 맞을 것입니다. 타사 유틸리티를보십시오. –

답변

7

diffing 알고리즘을 사용하고 싶습니다. (나는 질문과 같이 태그를 붙였습니다.) 이 아니라면 자신을 쓰십시오. 나는 NP 완전 문제이기 때문에 마음을 감싸기가 쉽지 않으므로 시도했지만 실패했습니다. 대신 클라이언트 (demo) 또는 서버 측 처리를위한 JavaScript 및 Java 구현이있는 diff-match-patch을 확인하십시오. HTML 차이점 처리를 수행해야하는 경우 daisydiff을 대신 사용하십시오. HTML/XML 비교는 매우 고통 스럽습니다 (see this page for some reasons why).

아마도 diffing의 그랜드 아빠는 GNU diff이고 Java implementation ("GNU Diff for Java"찾기)이 있습니다. 이 알고리즘은 diff-match-patch (dmp)보다 더 최적화되어 있습니다. dmp가 항상 개선되는 것처럼 보이기 때문에 매우 큰 문자열 (예 : 메가 바이트)을 비교해야한다면 GNU 알고리즘이 더 나은 방법 일 것입니다.

+0

orangepips, 이것이 완벽합니다. 유일한 문제는 Java이고 ColdFusion 응용 프로그램에 통합하는 방법이 없다는 것입니다. 자습서를 염두에두고 있다면 공유하십시오. – Mohamad

+0

아니요. 예제 사용법을 제공하는 .html 파일과 함께 .zip 안에 JavaScript 버전이 있습니다. 포함 된 데모 링크는 JavaScript 버전을 사용합니다. – orangepips

+1

@Mel, CF Web Dev 가이드를 확인하십시오. Java를 CF 어플리케이션에 쉽게 통합 할 수 있습니다. – Henry

1

this에게 기회를주십시오.

+0

Todd, 대단히 감사합니다. – Mohamad

+0

행운을 빈다. 그것이 효과가 있는지 알려주십시오. –

+0

그래서 이것을 다운로드하여 테스트 해 보았습니다. 이 질문에있는 텍스트를 compareText() 메서드를 사용하면 사용할 수 없습니다. compareLine()을 사용하면 결과를 얻을 수 있지만, 뭔가를 놓치지 않는 한 문제를 해결하기에는 너무 버그가있는 것처럼 보입니다. 이것이 내 답변의 요점을 직접 말해주는 것으로 생각하십시오. 문제를 해결하는 것이 어려워요. 나는 여기에 링크 된 솔루션이 그렇게 생각하지 않습니다. – orangepips

1

OK, 약 this은 무엇입니까? 원한다면 평범한 문자열을 사용하는지 확신 할 수 없지만 Java 통합 비트를 다루는 방법을 모르는 것에 대한 우려는 이미 제기 된 바 있습니다. 최소한 당신을 쓰기 방향으로 향하게해야합니다.

+0

토드, 알아두면 좋을 것 같습니다. 나는 이것을 조사 할 것이다. 나는 유일한 차이점을 저장할 필요가 없다는 것을 깨달았습니다. 나는 단지 수정 된 전체 문자열을 저장하고 diff-match-patch의 JS 버전을 사용하여 클라이언트 측에서 변경 사항을 보여 주어야합니다. – Mohamad

+0

차가움. 행운을 빕니다. –