原理:
取得字符串中最后一个“)”,然后找到离他最近的一个“(”,取得两个括号之前的字符串,
- /**
- * 拆分出当前字符串中最内层括号内数据
- */
- protected String reelOffBracketData(String args, String leftB, String rightB) {
- int leftBracket;
- int rightBracket;
- String temp = args;
- leftBracket = temp.lastIndexOf(leftB); // 获取最后一个左括号
- String newStr;
- if (leftBracket == -1) { // 如何没有左口号 返回数据
- return temp;
- }
- rightBracket = temp.substring(leftBracket).indexOf(rightB) + 1
- + temp.substring(0, leftBracket).length(); // 获取又括号
- if (rightBracket > temp.length()) { // 如果又获取的又括号位置 大于字符串最大长度
- rightBracket = temp.length(); // 又括号位置 等于字符串最后一个字符的位置
- }
- newStr = temp.substring(leftBracket, rightBracket); // 根据括号的位置,借取括号内数据
- ArgsList al = new ArgsList(leftBracket, rightBracket);
- super.ec.setAttr(newStr, al);
- return newStr;
- }
然后拆开字符串运算符,得到每个数字 保存到LIST中
/
- **
- * 把括号内数据 按照从左到右顺序依次保存在LIST中
- */
- public void symbolParse(List list, String args) {
- String temp = "";
- for (int i = 0; i < args.length(); i++) {
- // 如何获取CHAR 为数字或者"." 默认为一个数字并且未完成的数组
- if (Character.isDigit(args.charAt(i)) || args.charAt(i) == '.'
- || args.charAt(i) == CalculateUtil.MINUS_OPERATOR.charAt(0)) {
- temp = temp.trim() + args.charAt(i); // 把临时获取数字的字符串连接起来
- } else {// 如何获取的CHAR 不为数字
- if ("".equals(temp)) {// 当TEMP为空时候
- temp = "".trim() + args.charAt(i); // 把获取CHAR 保存到TEMP中
- }
- list.add(temp);
- list.add("".trim() + args.charAt(i));
- temp = "";
- }
- if (args.length() - 1 == i) { // 如何获取的获取到了最后一个字符 直接保存TEMP到LIST中
- list.add(temp);
- temp = "";
- }
- }
- }
对LIST中数据从零位开始计算,得到结果即可
提供原文件 大家帮我改改 提高下效率,计算是使用责任链模式写的