Лучший способ проверить строку на соответствие множеству шаблонов

Это вопрос больше о лучших практиках / шаблонах проектирования, чем о регулярных выражениях.

Короче говоря, у меня есть 3 значения: от, до и значение, которое я хочу изменить. From должно соответствовать одному из нескольких шаблонов:

XX.X
>XX.X
>=XX.X
<XX.X
<=XX.X
XX.X-XX.X

Тогда как To должно быть десятичным числом. В зависимости от того, какое значение указано в From, я должен проверить, удовлетворяет ли значение, которое я хочу изменить, условию From. Например, пользователь вводит «From:> 100.00 To: 150.00» означает, что каждое значение больше 100.00 должно быть изменено.

Само по себе регулярное выражение не является проблемой. Дело в том, что если я сопоставлю весь From с одним регулярным выражением, и оно пройдет, мне все равно нужно проверить, какой параметр был введен - это будет генерировать не менее 5 IF в моем коде, и каждый раз, когда я хочу добавить еще один параметр, мне нужно будет добавить еще один ЕСЛИ - не круто. То же самое, если бы я создал 5 шаблонов.

Теперь у меня есть HashMap, который содержит шаблон в качестве ключа и ValueMatcher в качестве значения. Когда пользователь вводит значение From, я сопоставляю его в цикле с каждым ключом на этой карте, и если оно совпадает, я использую соответствующий ValueMatcher, чтобы фактически проверить, соответствует ли значение, которое я хочу изменить, значению «From».

Этот подход, с другой стороны, требует, чтобы у меня была HashMap со всеми возможностями, интерфейс ValueMatcher и 5 реализаций, каждая из которых содержит только 1 метод «коротких совпадений». Я думаю, что это определенно лучше, чем IF, но все же выглядит как преувеличенное решение.

Есть ли другой способ сделать это? Или это то, как я должен это делать? Я действительно сожалею, что мы не можем хранить методы в HashMap / передавать их в качестве аргументов, потому что тогда у меня будет только 1 класс со всеми подходящими методами и хранить их в HashMap.

6
задан Mateusz Dymczyk 23 August 2011 в 14:09
поделиться