2012-01-19 26 views
1

我想知道什麼是最快,最有效的方法(使用JAVA)來搜索大字符串並執行查找替換,例如:對Java中某些字符序列的大字符串進行查找/替換的最有效方法

找到

'http://www.stackoverflow.com' 

長字符串的體內,並與

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

替換現在,您建議使用XSL來做到這一點已經是不可能的了。

在堅果殼中,我想知道如何在長字符串中找到URL的任何實例,並用適當的元素包裝它,這樣當頁面呈現在網頁上時,它會自動鏈接。謝謝。

+0

是長字符串HTML的其餘部分嗎? –

+0

請參閱http://stackoverflow.com/questions/1010928/faster-alternatives-to-replace-method-in-a-java-string –

+0

我已經嘗試在XSL中只實現我使用的框架只支持XSL 1.0大聲笑。長字符串不是HTML只是純文本,如果檢測到「www.google.com」,應該自動鏈接 –

回答

2

正則表達式來拯救!看看這個問題Regular expression to match URLs in Java

只需使用查找並替換Matcher即可找到它在上一個問題。

爲了完整起見,這裏是some code,它是做你想做的。

注意:假設您有一個已替換的字符串中已有URL的錨標記,則無法使用REGEX,並且必須將文本解析爲HTML,並在運行正則表達式替換之前僅查看文本節點。

+3

http://xkcd.com/208/ – Ted

+0

@TedPrz我很高興你有我的參考。令人遺憾的是,正則表達式並不足以完成它,但它確實是一個相當不錯的工作。 –

1

我不知道最高效(CPU週期明智),但我會使用RegEx'es。從程序的角度來看,它們絕對是最快,最高效,最乾淨的。

您可以使用一個PatternMatcher(見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

如果你正在尋找一個文字字符串,不要打擾正則表達式。只需使用String.replace即可進行字面替換。

+0

同意 - 更有效率,但他的問題更進一步,並表明他正在尋找一種通用的方式來包裝所有的網址在HTML標籤。 –

0

當然,我越想這件事,我越想知道沒有更好的解決方案。我已經將它作爲一個不同的答案分開,因爲它不是對您的問題的直接回答,但是,它是解決您的問題的可能方案。

而不是解析Java中的所有內容,您可以讓Web瀏覽器本身執行自動鏈接。有幾個JS庫已經完成了這項工作。您可能很容易在JQuery中編寫一些代碼來爲您完成此任務,或使用其他人編寫的現有插件。

快速Google搜索找到http://codesnipp.it/javascript/jquery-plugin-to-auto-link-urls作爲JQ插件。

+0

非常感謝我的全面解答 –

相關問題