我已经获得了string = int(ardString, 2)
ValueError: invalid literal for int() with base 2: '1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 '
课程,该课程检查输入的字符串是否适合任何预定义模式。有一段时间,课程正在实施越来越多的新模式,这导致了以下形式的课程:
CommandFormatValidator
现在我想清理这堂课。有没有人知道我怎么能实现这一目标?我会特别感谢任何我可以申请的设计模式。
答案 0 :(得分:4)
您可以将它们全部列在数组中,然后迭代数组。
顺便说一句:使用^
时,您不需要matches()
锚点。
不知道你是否错过了第一次测试中的!
,但现在却没有:
public class CommandFormatValidator {
private Pattern adlPatternAll = Pattern
.compile("^ACTV/(READ|ADD|DEL|RPL)/ADL.*");
private Pattern adlPatternAddDefault = Pattern
.compile("^ACTV/ADD/ADL/(DFLTTY((/([A-Z0-9]{7})){1,5})|DFLMIN(/[0-9]{1,4}))");
private Pattern adlPatternDeleteTtymailGeneral = Pattern
.compile("^ACTV/(DEL|READ)/ADL/TTYMAIL(/[A-Z0-9]{7})?");
//around 20 more pattern declarations...
private Pattern[] adlAll = { adlPatternAddDefault
, adlPatternDeleteTtymailGeneral
//more
};
public void validate(Object payload){
String command = (String)payload;
if (! adlPatternAll.matcher(command).matches())
return;
for (Pattern p : adlAll)
if (p.matcher(command).matches())
return;
throw new ServiceException(CommandErrors.INVALID_FORMAT);
}
}