public boolean typeMatch(char c1, char c2) {
if (c1 == '{' || c1 == '}') {
return (c2 == '{' || c2 == '}');
} else if (c1 == '(' || c1 == ')') {
return (c2 == '(' || c2 == ')');
} else if (c1 == '[' || c1 == ']') {
return (c2 == '[' || c2 == ']');
} else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我在我的程序中有上面的代码,我想知道是否有更好的方法来实现这个方法而不使用大量的if/else语句.
您可以将符号对(打开和关闭)提取到a中char[][]
,然后遍历该数组以测试匹配.就像是,
static final char[][] pairs = { { '{', '}' }, { '(', ')' }, { '[', ']' } };
public boolean typeMatch(char c1, char c2) {
for (char[] pair : pairs) {
if (c1 == pair[0] || c1 == pair[1]) {
return c2 == pair[0] || c2 == pair[1];
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
或者,如果我们用(s)和2实现它,可能更容易阅读1.就像是,String
String.indexOf(int)
public boolean typeMatch(char c1, char c2) {
String[] pairs = { "{}", "()", "[]" };
for (String pair : pairs) {
if (pair.indexOf(c1) != -1) {
return pair.indexOf(c2) != -1;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
1 这绝不是坏事.
2 链接的Javadoc部分地说,在这两种情况下,如果此字符串中没有出现这样的字符,则-1
返回.