анализ строки Java - PullRequest
       7

анализ строки Java

2 голосов
/ 15 августа 2010

Я пытаюсь проанализировать клиентский запрос и на основе структуры пытается сформировать jTree. Пример запроса ниже-

 ^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.

Ответы [ 4 ]

2 голосов
/ 15 августа 2010

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

Если у вас есть контроль над форматом, было бы лучше перейти на стандарт, такой как JSON или XML, где вы можете использовать библиотеку (например, JAXB RI , JaxMeAPI , Джексон ), чтобы сделать большую часть работы за вас. В противном случае используйте такой инструмент, как ANTLR или комбинаторы синтаксического анализа , чтобы определить свой собственный анализатор с использованием грамматики.

1 голос
/ 15 августа 2010

Я бы не стал использовать простые методы String.Вещи становятся довольно сложными с течением времени;даже если выполняется относительный разбор прямого рекурсивного спуска (подход сверху вниз).

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

Но если вы использовали компиляторы компилятора (эквиваленты yacc, bison или java, такие как Antlr, java_cup), это похоже на хороший вариант использования.И даже если у вас нет, может быть, было бы хорошо, чтобы посмотреть;Antlr, кажется, наиболее часто используется, я использовал java_cup несколько лет назад, и он отлично работал для меня.

1 голос
/ 15 августа 2010

Для поиска и манипулирования большими строками я предпочитаю использовать Perl и регулярные выражения. Java.util.regex имеет довольно простую библиотеку регулярных выражений для выполнения вычислений такого типа.

http://download -llnw.oracle.com / JavaSE / 1.4.2 / документы / API / Java / Util / регулярное выражение / пакет-summary.html

0 голосов
/ 15 августа 2010

Вероятно, это пользовательский формат. Вам просто нужно разобрать его вручную, используя String.split, и это будет полезно и с классом StringTokenizer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...