簡體   English   中英

java字符串解析

[英]java string parsing

我正在嘗試解析客戶端請求,並基於結構嘗試形成jTree.Sample請求如下-

 ^class^="Voucher" MSISDN="566773" TopupValue="500" Tax="56"
                  MyOrder={ ^class^="Order" OrderID="221" OrderAddress="Bangalore/KA" OrderDetails="100 boxes"
                   Company_Info={ ^idx^=1 ^class^="CompanyDetails" CompanyName="MICROSOFT"
                                       CompanyAddress="USA" CompanyEmployees=32 }
                   Travel={ ^idx^=1 ^class^="Transport" TransportType="CAB"
                              Total_Buses=34 MonthlyExpense=455 AIR="NO" RAIL="YES" SEA="NO" }
                    ListOfCities={ ^idx^=2 ^class^="CITYLIST" ^1^="MUMBAI" ^2^="BANGALORE" ^3^="HYDERABAD" }
                    ListOfStates={ ^idx^=3 ^class^="StateList" ^1^="Maharashtra" ^2^="Karnataka" } }
        ListOfCountries={ ^idx^=3 ^class^="CountryList" ^1^="India" ^2^="Bangla Desh" } }

如您所見,根節點是Voucher及其附屬物,Order在其中,CompanyDetails在Order內,依此類推。 這只是一個示例請求。另一個請求可能(可能不包含)“ Company_Info”。 如何解析此類請求? 我不是在索要代碼,而是索要方法。我僅使用String / buffer方法就能達到目的嗎? 請求以java字符串形式接收。

我討厭不得不讀取/維護使用String方法或正則表達式解析該格式的代碼。

如果您可以控制格式,那么最好切換到JSON或XML之類的標准,您可以在其中使用庫(例如JAXB RIJaxMeAPIJackson )來為您完成大部分工作。 否則,請使用ANTLR解析器組合器之類的工具來使用語法定義自定義解析器。

我不會嘗試使用簡單的String方法。 隨着時間的流逝,事情變得相當復雜。 即使進行相對簡單的遞歸下降解析(從上到下的方法)。

下一個最簡單的(短期的)步驟是查看語法是否足夠簡單以至於可以由正則表達式處理。

但是,如果您使用過編譯器(yacc,bison或與Java等價的Antlr,java_cup等),這似乎是一個好用例。 即使您沒有,看看它還是不錯的; Antlr似乎是最常用的,我幾年前使用過java_cup,對我來說很好用。

對於像這樣的大型字符串搜索和操作,我更喜歡使用Perl和正則表達式。 Java.util.regex具有相當不錯的正則表達式庫,可讓您執行這些類型的計算。

http://download-llnw.oracle.com/javase/1.4.2/docs/api/java/util/regex/package-summary.html

多數民眾贊成在自定義格式。 您只需要使用String.split手動解析即可,並且對StringTokenizer類也很有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM