/** Test if delimiters in the given expression are properly matched. */
public static boolean isMatched(String expression) {
final String opening = "({["; // opening delimiters
final String closing = ")}]"; // respective closing delimiters
Stack<Character> buffer = new LinkedStack<>();
for (char c:expression.toCharArray()) {
if (opening.indexOf(c) != -1) // this is a left delimiter
buffer.push(c);
else if (closing.indexOf(c) != -1) { // this is a right delimiter
if (buffer.isEmpty()) // nothing to match with
return false;
if (closing.indexOf(c) != opening.indexOf(buffer.pop()))
return false; // mismatched delimiter
}
}
return buffer.isEmpty(); // were all opening delimiters matched?
}
Stack<E>
具有未实现的方法:push( E )
,pop()
,isEmpty()
其中E
是通用数据类型。 LinkedArray<E>
方法的Stacks<E>
类。 [{(a+b)*(c+d)}]
;和isMatched(String expression)
是一种检查表达式是否包含正确配对大括号的方法。 buffer
是一个堆栈,用于存储推送的表达式(现在是一组char
)成员。 我能够理解代码,直到for-each循环。 那之后的线条正在吃我。
答案 0 :(得分:0)
indexOf(&#34; c&#34;)方法用于返回给定字符串中c的第一次出现的索引。例如String s =&#34;的java&#34 ;; int i = s.indexOf(&#34; a&#34;); 会设置i = 1