Добавить ноль к строке

Несколько вариантов для вас:

  1. Повторно используйте существующий синтаксический анализатор выражений. Это будет работать, если вы будете гибкими в синтаксисе и семантике. Хорошим, который я рекомендую, является язык унифицированного выражения, встроенный в Java (первоначально для использования в JSP и JSF-файлах).
  2. Напиши свой собственный парсер с нуля. Существует четкий способ написать парсер, который учитывает приоритет оператора и т. Д. Описывая, как именно это делается, выходит за рамки этого ответа. Если вы идете по этому маршруту, найдите хорошую книгу о дизайне компилятора. Теория парсинга языков будет рассмотрена в первых нескольких главах. Как правило, анализ выражений является одним из примеров.
  3. Используйте JavaCC или ANTLR для генерации лексера и парсера. Я предпочитаю JavaCC, но каждому свой. Просто Google «образцы javacc» или «образцы antlr». Вы найдете много.

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

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

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

Содержание org.eclipse.sapphire / plugins / org.eclipse.sapphire.modeling / src / org / eclipse / sapphire /modeling/el/parser/internal/ExpressionLanguageParser.jj

140
задан bluish 27 October 2011 в 14:26
поделиться

3 ответа

Вы можете использовать PadLeft

var newString = Your_String.PadLeft(4, '0');
270
ответ дан 23 November 2019 в 22:28
поделиться
myInt.ToString("D4");
57
ответ дан 23 November 2019 в 22:28
поделиться
"1".PadLeft(4, '0');
9
ответ дан 23 November 2019 в 22:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: