【发布时间】:2013-11-17 21:21:49
【问题描述】:
我正在编写一个正则表达式解析器,循环切换反模式似乎是唯一的方法。请忽略实际的解析规则,因为这种解析逻辑只是为内部应用程序定制的,与常用的有偏差。
public static boolean match(String regex, String str) {
int i = 0;
int j = 0;
while ((i < regex.length() && j < str.length())) {
switch(regex.charAt(i)) {
case '.' : i++; j++; break;
case '*' : // do something ; break
default : if (regex.charAt(i) != str.charAt(j)) { return false; } else {i++; j++};
}
}
}
在这种情况下如何防止循环切换?有没有为此目的而设计的设计模式?
【问题讨论】:
-
循环/切换有什么问题?您可以轻松地将 switch/case 语句替换为 if/else 语句
-
我看不出有什么问题,但我读到它是一种反模式。 en.wikipedia.org/wiki/Loop-switch_sequence
-
这真的不是一个反模式,只是一个让你上 DailyWTF 的愚蠢的东西。我的意思并不是说使用带有
switch的每个循环构造是错误的,而是在编译时已知的范围内使用for或foreach和switch显然是愚蠢的。 -
@JavaDeveloper:你真的读过那篇文章吗?第二段以
it is not necessarily an antipattern to use a switch statement within a loop [...]开头,然后讨论它不是反模式的情况。它没有特别提到这种用法,但它绝对不会被视为反模式。
标签: java loops design-patterns switch-statement strategy-pattern