Есть ли библиотека Java для разбора строк в формате printf? - PullRequest
6 голосов
/ 02 апреля 2012

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

Вдобавок ко мне, я мог бы сделать что-то с регулярным выражением, чтобы посчитать количество '%', но я не слишком знаком со строками формата, поэтому я не могу рассчитывать должным образом ... (исключая экранированные и т. д.)

edit: мне действительно нужен номер параметра вместе с отображением параметра # в тип параметра, например, "привет% s% +. 3i "даст {0 -> String, 1 -> Integer}

Ответы [ 2 ]

7 голосов
/ 02 апреля 2012

Формат строки интерпретировать каждый % как заполнитель, с литералом %, экранированным как %%, поэтому все должно быть так просто:

String formatString;
int parameterCount = formatString.replace("%%", "").split("%").length - 1;

Этот код сначала удаляет все экранированные (удвоенные) %, затем подсчитывает % через сплит.

1 голос
/ 02 апреля 2012

Почему бы вам просто не использовать Regex, похожий на %(?:%|[0-9]+([dox])), и таким образом изучить спецификатор типа формата?

Был еще один SO-вопрос о разборе строк формата sprintf с помощью regex , что может дать вам больше идей.Если вы не укажете, какие функции printf () вам нужны, трудно рекомендовать точное регулярное выражение.

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

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