这是一个关于最佳实践/设计模式的问题,而不是正则表达式。
简而言之,我有三个值:起始点、终点和我想要改变的值。起始点必须匹配多种模式之一:
XX.X
>XX.X
>=XX.X
<XX.X
<=XX.X
XX.X-XX.X
其中From必须是一个十进制数。根据给定的From值,我必须检查要更改的值是否满足From条件。例如,用户输入“From:>100.00 To:150.00”表示每个大于100.00的值都应该更改。
正则表达式本身不是问题。问题在于,如果我将整个From与一个正则表达式匹配,并且它通过了,我仍然需要检查输入了哪个选项 - 这将在我的代码中生成至少5个IF语句,每次我想添加另一个选项时,都需要添加另一个IF语句 - 不好。同样的事情如果我创建5个模式。
现在我有一个HashMap,它将模式作为键,ValueMatcher作为值。当用户输入From值时,我会在循环中将其与该映射中的每个键进行匹配,如果匹配,则使用相应的ValueMatcher来实际检查我要更改的值是否满足“ From”值。
与此方法相反,我需要拥有一个包含所有可能性的HashMap,一个ValueMatcher接口和5个实现,每个实现只有1个短的“matches”方法。我认为这比IF语句好,但看起来仍然像是一个夸张的解决方案。
还有其他方法可以做到这一点吗?还是这就是我应该做的方式?我真的很遗憾我们不能在HashMap /将它们作为参数传递中保存方法,因为那样我只需要一个类中的所有匹配方法,并将它们存储在HashMap中。