Манипулирование текстом с сохранением смещений исходного положения

StackOverflow https://stackoverflow.com/questions/1086342

  •  23-08-2019
  •  | 
  •  

Вопрос

Мне нужно манипулировать большими строками в Java (удаляя и добавляя удаленные символы снова, перемещая символы вокруг), но все еще хочу запомнить смещения исходной позиции.Например.слово "компьютер" начинается со смещения 133 в исходном тексте и затем перемещается в позицию 244, я по-прежнему хочу информацию о том, что изначально оно было в позиции 133.Самым некрасивым (и ресурсоемким) решением было бы сохранить для каждого символа его исходную позицию плюс ее изменение.Есть безусловно, лучшие решения, но также и более сложные.Существуют ли какие-либо хорошие библиотеки для обработки текста, в которых есть решение моей проблемы?Я не хочу изобретать велосипед заново.

С уважением, Кай

Это было полезно?

Решение

Насколько велики эти строки ?Учитывая объем доступной сегодня памяти, возможно, лучше всего использовать грубую силу.

Вы говорите о перемещении слов, но сохранении позиций символов.Почему бы не сохранить позиции word и историю для каждого экземпляра word.Обратите внимание, что вы могли бы проявить смекалку и воспользоваться шаблон мушиного веса чтобы сохранить наличие нескольких экземпляров этих объектов до тех пор, пока вам не потребуется.т. е.ваш объект 'string' содержит один объект 'computer' word, но записывает, что это слово встречается в позиции 133, 245, 667 и т.д.(плюс история по мере необходимости)

Другие советы

Проблема, на которую вы ссылаетесь, официально называется "Проблема с коррекцией от строки к строке" который связан с Дельта - кодирование и тот Расстояние Левенштейна. Здесь это код для вычисления расстояния (он на Java).Весь код различия есть, вам просто нужно добавить код, который отслеживает шаги, чтобы вы могли отменить их или отследить.Примечание:"перемещение" слова или символа будет представлять собой пару удаления / вставки одного и того же слова, которые встречаются вместе.

Это должно работать как для перемещения символов, слов, так и для подстрок.

Прежде чем говорить об эффективности, выполните расчет обратной стороны конверта.Когда вас это устраивает и у вас есть код, вы можете перепроверить с помощью профилировщика / секундомера.

Есть готовое решение в виде Swing-текста.Он должен использоваться вне контекста Swing, хотя IIRC, который он пытается запускать исключения в EDT (типичным способом, враждебным потоку Swing), возможно, захочет проверить это.Есть такие Position объекты, которые отслеживают позиции персонажей в Document даже после вставок и удалений.По крайней мере, это покажет, как это можно сделать.Предположительно, реализация Apache Harmony поставляется с лицензией, подходящей для большинства обычных людей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top