【求助】如何处理带括号的字符串
写一个函数用来统计字符串中各字母出现的次数。
输入:X2Y3XZ,输出:X3Y3Z1;输入:Z3X(XY)2,输出:X3Y2Z3;输入:Z4(Y2(XZ2)3)2X2,输出:X8Y4Z16;
想了很久,只能想到使用递归,先判断字串字符的次数,一层层递归到主串。但关于递归的边界条件一直想不出来,目前只写了一个判断子串的方法,将字串和后方的次数返回为list
附上方法:
public static List<String> extractMessage(String msg) { List<String> list = new ArrayList<String>(); int start = 0;//字串开始坐标 int startFlag = 0;//用来固定第一个遇到的括号,记录左括号出现的次数 int endFlag = 0;//记录右括号出现的次数 for (int i = 0; i < msg.length(); i++) { if (msg.charAt(i) == '(') { startFlag++; if (startFlag == endFlag + 1) {//如果左括号出现时,右括号没出现过,说明是第一个括号 start = i; } } else if (msg.charAt(i) == ')') { endFlag++; if (endFlag == startFlag) {//如果右括号出现次数,等于左括号出现次数,说明是最右侧的括号 list.add(msg.substring(start + 1, i)); Character nextInt = msg.charAt(i+1); if (Character.isDigit(nextInt)){ list.add(String.valueOf(msg.charAt(i+1)));//把次数也放进去 } else list.add("1");//否则默认当作1 } } } return list; }