请解释一下这个Delimiter与堆栈匹配的代码

时间:2016-08-07 18:12:38

标签: java algorithm stack

/** 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?
}
  1. 假设通用堆栈接口Stack<E>具有未实现的方法:push( E )pop()isEmpty()其中E是通用数据类型。
  2. 实现所有LinkedArray<E>方法的Stacks<E>类。
  3. &#39;表达&#39; in&#39; isMatched()&#39;是一个用括号作为分隔符的数学表达式。前 - [{(a+b)*(c+d)}];和
  4. isMatched(String expression)是一种检查表达式是否包含正确配对大括号的方法。
  5. buffer是一个堆栈,用于存储推送的表达式(现在是一组char)成员。
  6. 我能够理解代码,直到for-each循环。 那之后的线条正在吃我。

1 个答案:

答案 0 :(得分:0)

indexOf(&#34; c&#34;)方法用于返回给定字符串中c的第一次出现的索引。例如String s =&#34;的java&#34 ;; int i = s.indexOf(&#34; a&#34;); 会设置i = 1