// begin操作符左边的常量或变量名 for (inti=0, len = exp.length(), begin = i; i < len; i++) { charc= exp.charAt(i); if (!TOKENS.contains(c)) { // 最后一个字符,且exp不为常量或变量,作为表达式片段截取 if (i == len - 1) { if (begin > 0 && begin <= i) { segments.add(parseExp(callTimes + 1, exp.substring(begin, len))); } } continue; }
// 字符为操作符
// 左括号:有表达式片段 if ('(' == c) { // 找右括号 ) intcloseIdx= findCloseIdx(exp, i + 1, '(', ')'); if (closeIdx < 0) { thrownewIllegalStateException(String.format("无右括号对应第%d个字符的左括号", i)); } segments.add(parseExp(callTimes + 1, exp.substring(i + 1, closeIdx))); i = closeIdx; begin = i + 1; continue; } if (')' == c) { thrownewIllegalStateException(String.format("无左括号对应第%d个字符的右括号", i)); }