Наиболее эффективный способ найти / заменить большую строку для определенных последовательностей символов в Java - PullRequest
1 голос
/ 19 января 2012

Мне интересно, какой самый быстрый и эффективный способ (с использованием JAVA) найти большую строку и найти замену, такую ​​как:

найти

'http://www.stackoverflow.com' 

в теле длинной строки и замените его на

'<a href="http://www.stackoverflow.com">http://www.stackoverflow.com</a>' 

Теперь, прежде чем предлагать использовать XSL для этого, об этом уже не может быть и речи.

В ореховой оболочке я хотел бы знать, как найти любой экземпляр URL в длинной строке и обернуть его соответствующим элементом, чтобы при отображении страницы в Интернете она автоматически связывалась. Благодарю.

Ответы [ 4 ]

2 голосов
/ 19 января 2012

Регулярные выражения на помощь!Посмотрите на этот вопрос Регулярное выражение для сопоставления URL-адресов в Java

Просто используйте поиск и замену из Matcher вместо того, чтобы просто найти его, как в предыдущем вопросе.

Для полноты картины приведем некоторый код , который делает то, что вы хотите.

ПРИМЕЧАНИЕ. Предполагая, что у вас есть тег привязки с URL-адресом, который уже находится в заменяемой строке, вы не можете использоватьREGEX и должен анализировать текст как HTML и только смотреть на текстовые узлы перед запуском замены регулярного выражения.

1 голос
/ 19 января 2012

Я не знаю о наиболее эффективных (с точки зрения цикла процессора), но я бы использовал RegEx'ы. Они, безусловно, самые быстрые, эффективные и чистые с программной точки зрения.

Вы можете использовать Pattern и Matcher (см. http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html) или, что еще проще, использовать ярлык String.replaceAll, который уже является частью объекта String.

myString.replaceAll( "(<URL REGEX>)", "New String $1 Here" );

где $ 1 заменяется тем, что соответствует группе # 1 в строке поиска. Вы также можете использовать онлайн-инструменты для проверки регулярных выражений во время их кодирования, например http://www.fileformat.info/tool/regex.htm.

В зависимости от типа соответствия регулярному выражению, которое вам нужно сделать, вы можете попробовать следующее регулярное выражение или выполнить быстрый онлайн-поиск лучшего.

(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?

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

Удачи.

Эрик

0 голосов
/ 20 января 2012

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

Вместо того, чтобы разбирать все в Java, вы можете разрешить самому веб-браузерусделать автосвязь.Есть несколько библиотек JS, которые уже выполняют эту работу.Скорее всего, вы можете легко что-то кодировать в JQuery для этого или использовать существующие плагины, которые написали другие.

Быстрый поиск в Google находит http://codesnipp.it/javascript/jquery-plugin-to-auto-link-urls в качестве плагина JQ.

0 голосов
/ 19 января 2012

Не беспокойтесь о регулярных выражениях, если вы ищете буквальную строку. Просто используйте String.replace для буквальной замены.

...