Сравнение двух строк или объектов и получение разницы обратно - PullRequest
3 голосов
/ 04 января 2011

Я хотел бы внедрить тип истории версий на моем веб-сайте, и мне нужен способ сравнения строк или ключей объектов.Например:

Исходная строка / ключ объекта: более быстрая коричневая лиса

Исправленная строка / ключ объекта: быстрая коричневая лиса перепрыгнула через ленивого кролика

Revision: добавлено перепрыгнул через ленивого кролика удалено er

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

Я знаю о функции find () иЯ подозреваю, что это главный кандидат на использование, но я не знаю, как представить его как решение, так как он сравнивает строки, так сказать, «оптом».

Ответы [ 2 ]

7 голосов
/ 04 января 2011

Вам нужен алгоритм сравнения (я пометил вопрос как таковой), который я настоятельно рекомендую вам , а не , попробуйте написать сами.Я пытался - и потерпел неудачу - так как это полная проблема NP, и не так-то легко обдумать это.Вместо этого проверьте diff-match-patch , в котором есть реализация JavaScript и Java для клиентской ( demo ) или обработки на стороне сервера.Если вам нужно вместо HTML взглянуть на daisydiff , пусть и предупрежден, что HTML / XML-рассылка действительно является болезненным опытом ( см. Эту страницу по некоторым причинам, почему ).

Вероятно, дедушка сравнения - GNU diff , который также имеет реализацию Java (найдите "GNU Diff для Java").Этот алгоритм более оптимизирован, чем diff-match-patch (dmp), хотя кажется, что dmp постоянно улучшается, поэтому, если вам нужно сравнивать очень большие строки (например, мегабайты), алгоритм GNU, вероятно, лучше.

1 голос
/ 04 января 2011

ОК, тогда как насчет этого ? Не уверен, что он выполняет простые старые строки, как вам хотелось бы, но, похоже, он решает ваши проблемы, связанные с незнанием того, как справляться с битами интеграции Java (поскольку это уже написано). Должен, по крайней мере, указать вам направление записи.

...