Извлечь всю строку из проекта java

У меня довольно большое количество исходных файлов, в которых мне нужен синтаксический анализ и извлечение всех строковых литералов, и помещаем их в файл в качестве старой старой константы java.
Например:

Label l = new Label("Cat"); 

Станет:

 Label l = new Label(Constants.CAT); 

А в Constants.java я бы:

 public final static String CAT = "Cat"; 

Я не хочу, чтобы строки были экстернализированы в текстовом файле свойства.
Одна из причин заключается в согласованности и удобочитаемости кода.
Другой заключается в том, что наш клиентский код использует GWT , который не поддерживает механизм текстовых файлов Java.

Я мог бы написать какой-то парсер (возможно, с помощью задачи замены муравьев)?
Но я подумал, что IDE уже делает это автоматически.

Чтобы закончить ответ Питера Келли, вы можете рассмотреть для Eclipse IDE решение AST .

Затем вы можете написать программу AST, которая анализирует исходный код и делает то, что вы хотите.

Полный пример доступен в этой статье заглавного угла , а также более подробную информацию в справке eclipse .
И вы можете найти несколько примеров из листинга 5 раздела «Внедрение на месте перевода» « Автоматизация внедрения доменных языков в Eclipse JDT» наряду с несколькими примерами в проектах GitHub .

Eclipse делает это автоматически. Щелкните файл правой кнопкой мыши, выберите «Источник», затем «Внешние строки»,

Это не делает то, что вы запросили (имея строки в файле Constants.java как строки), но используемый метод очень эффективен. Он перемещает их в файл свойств, который может быть загружен динамически в зависимости от вашей локали. Наличие их в отдельном исходном файле Java, как вы предлагаете, означает, что вы либо будете иметь ВСЕ языки в своем приложении одновременно, либо вы будете отправлять разные приложения в зависимости от языка.

Мы используем его для наших приложений, где даже базовый материал должен поставляться на английском и японском языках – наши более сложные приложения поставляются на 12 языках – мы не являемся небольшой компанией по разработке программного обеспечения любыми способами :-).

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

Все, что вам нужно сделать, это изменить class Accessor, чтобы использовать встроенные строки (в отдельном classе), а не загружать их во время выполнения.

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

Я полностью признаю, что сказал Пакс Диабло. Мы также используем эту функцию.

При применении к файлу classа функция «Внешние строки» создаст два файла, class Messages.class и файл свойств messages.properties. Затем он перенаправляет все прямые использования строковых литералов на вызов Message.get (String key) и использует ключ, введенный для строки в мастере «Ext. String».

BTW: Что плохого в файлах свойств? По его словам, вы можете просто изменить файл свойств и не менять class, если вам нужно изменить текст.

Еще одно преимущество заключается в следующем: способ извлечения строковых литералов в файл свойств оставляет вас свободно переводить исходный язык на любой язык, который вы хотите, без изменения какого-либо кода . Файл-загрузчик свойств загружает файл целевого языка автоматически, используя соответствующий файл с кодом языка iso. Поэтому вам не нужно беспокоиться о платформе, на которой работает ваш код, и автоматически выбирает соответствующий язык (почти). См. Документацию classа ResourceBundle для того, как это работает подробно.

Возможно, вы захотите проверить механизм преобразования исходного кода Jackpot в NetBeans, который позволит вам сценаризировать исходные преобразования.

  • Как strtok () разбивает строку на токены в C?
  • Устаревшее преобразование из строкового литерала в 'char *'
  • Использование значений Enum как строковых литералов
  • Как извлечь подстроку с помощью регулярного выражения
  • XML-документ для строки
  • Как вернуть текст из Native (C ++) кода
  • Преобразование DateTime из строки C #
  • Как я могу поместить строку в Java?
  • C #, чтобы проверить, является ли строка целым числом?
  • Как анализировать математическое выражение, заданное как строку, и возвращать число?
  • Извлечь время с даты String
  • Interesting Posts

    Android ListView заголовки

    Установить Windows 8 в устаревших и UEFI: преимущества или недостатки?

    Нужен ли мне внешний жесткий диск для создания образа системы?

    Предлагаемый критерий для тестирования загрузки процессора антивирусного программного обеспечения

    Как вы переустанавливаете пакет с помощью Homebrew (Mac)?

    Можно ли комбинировать вычислительную мощность 2 компьютеров?

    Chrome не работает с подключением к удаленному рабочему столу

    Каково максимальное количество бара, которое теоретически может решить 64-битная машина?

    Класс BaseAdapter не будет устанавливать адаптер внутри Asynctask – Android

    Операторы переключения .Net hashируются или индексируются?

    Как я могу начать настройку портативного wifi-портала?

    Уверен ли REST возвращать контент после POST?

    Аутентификация Windows IIS Express

    Как добавить новую строку (разрыв строки) в файле XML?

    Использование Emacs для рекурсивного поиска и замены в текстовых файлах, которые еще не открыты

    Давайте будем гением компьютера.