2013-04-05 100 views
1

我有一個問題,這讓我想到如何提高系統的速度和內存。 我將通過舉例進行說明,我有這個文件,它有一些字符串:字符串處理算法

<e>Customer</e> 
    <a1>Customer Id</a1> 
    <a2>Customer Name</a2> 
<e>Person</e> 

它類似於XML文件。

現在,我的解決辦法是,當我讀到<e>Customer</e>,我會從閱讀到最近的標籤,然後,從子到<e>Customer</e>最近的標籤。

它使系統需要處理這麼多。我只用正則表達式來做到這一點。我認爲我會像真正的編譯器那樣做一些事情(詞法分析,分析器)。

任何想法?

在此先感謝!

+2

爲什麼不定義一個實際的XML文檔(您可以定義自己的標籤,所以我認爲您已經顯示的內容可能已經有效......),然後通過其中一個XML解析庫運行它? – 2013-04-05 16:07:40

+0

感謝您的快速回復,這對我來說只是一個挑戰。我正在尋找開源的xml來查看,但所有的開源使用jdk的源代碼。 – 2013-04-05 16:29:09

+0

儘管技術上JDK本身似乎適用於Linux(部署),但一小部分Java代碼本身仍應該是「便攜式」的 - 請查看[OpenJDK](http://openjdk.java.net/),這是一個JDK的開源版本。 – 2013-04-05 17:29:23

回答

2

如果你真的不想使用免費和可靠的XML解析器之一,那麼一個真正快速的解決方案几乎肯定會涉及到一個狀態機。

看到這個How to create a simple state machine in java問題有個好的開始。

請確保你有一個非常服用這條路線的好理由。

+0

+ 1.這是我的出路。 – 2013-04-05 16:35:33

+0

@TrungHuynh - 我很遺憾聽到 - 祝你好運。有很多資源覆蓋狀態機。 – OldCurmudgeon 2013-04-05 23:01:21

1

只是不把時間投入到XML詞法分析器/解析器(它不值得),並使用什麼是在那裏。

例如http://www.mkyong.com/tutorials/java-xml-tutorials/是一個很好的教程,只是使用谷歌。

+0

謝謝,如果有任何語言沒有內置的XML詞法分析器和解析器? – 2013-04-05 16:30:09

2

正則表達式不是解析這樣的複雜結構的正確工具。由於您的文件看起來很像XML,因此添加缺少的內容以使其成爲XML(即標頭)並將結果提供給XML解析器可能很有意義。

XML解析器針對快速處理大量數據(特別是SAX類型)進行了優化。如果切換到使用正則表達式處理大量文本來解析XML,則應該看到性能顯着提高。

+0

我在PhoneGap中處理數據,我認爲,在Javascript中沒有最好的xml解析器。這是我做的原因。 – 2013-04-05 16:34:50

+0

@TrungHuynh對於適度大的輸入,即使是錯誤的XML解析器仍然會擊敗正則表達式。 – dasblinkenlight 2013-04-05 16:47:17

+0

好的,我同意,爲什麼我不建立一個更適合我的目的的新解析器? – 2013-04-05 17:21:39