Получить пакет исходного файла Java - PullRequest
2 голосов
/ 17 мая 2010

Моя цель - найти пакет (в виде строки) исходного файла Java, заданный в виде открытого текста и еще не отсортированный в папках.

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

  • Сканирование файла слово за словом, сохраняя флаг «внутри комментария» для сканера. При первом обнаружении ключевого слова package, не входящего в комментарий, остановите сканирование и сообщите результат.
  • Использовать регулярное выражение - должно быть теоретически возможно, потому что в Java нет комментариев к блоку, но я попытался создать такое регулярное выражение, и оно оказалось довольно сложным - по крайней мере для меня.

Другое различие между этими двумя подходами состоит в том, что при сканировании вручную я могу остановить сканирование, когда я могу быть уверен, что ключевое слово package больше не может появиться, экономя некоторое время ... и я не уверен, что могу что-то сделать похожи с регулярными выражениями. С другой стороны, решение «когда он больше не может появляться» не обязательно просто , хотя я мог бы использовать для этого некоторую эвристику.

Я хотел бы услышать любые отзывы по этой проблеме и был бы рад любой помощи с регулярным выражением. Мое решение написано и на Java.

РЕДАКТИРОВАТЬ: для тех, кто предлагает на самом деле синтаксический анализ файла - это, безусловно, жизнеспособный вариант, спасибо, но я чувствую себя немного излишним для меня, чтобы проанализировать весь файл только для пакета. Я сделаю это, если нет более простой альтернативы.

Ответы [ 2 ]

6 голосов
/ 17 мая 2010

Я решил эту проблему с помощью парсера Java. Для моей цели лучше всего подойдет javaparser .

CompilationUnit cu = JavaParser.parse( file );
String packageName = cu.getPackage().getName().toString();
1 голос
/ 17 мая 2010

Вы можете использовать реальный анализатор исходного кода Java, например javaparser . Это дает правильно проанализированный Java-файл без необходимости заново изобретать анализатор Java или с помощью анализатора бедняков (регулярное выражение)

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

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