我需要这样实现的目的是,实现字符串表达式的嵌套,如
left(left('abc=efg',4),1)怎么样把最外一层参数分割开来
可能的参数组合包括: 
left('abc=efg',4),1
left('abc=efg',4),'='
'abc=efg',left('abc=efg','=')
left('abc=efg',2),left('abc=efg','=')

解决方案 »

  1.   

    是不是如何得到:left('abc=efg',4),1?
    如果是的话,用栈的思想,很容易办到
      

  2.   

    如果只嵌套一层可以这样:
    String str = "left('abc=efg',4),1";
    String[] strs = str.split("(?<=^[^(]+|^[^(]*\\([^)]*\\)[^(]*),");
    for (int i = 0; i < strs.length; i++) {
    System.out.println(strs[i]);
    }如果是未知层次嵌套,Java自带的正则引擎是做不到的。可以自己用堆栈实现
      

  3.   

    解决了各位,思路比较简单,因为括号和引号都是成对的,不是在括号和引号内部的逗号即为分界
    length = params.length();
    bracketCount = 0; //在括号内
    quotMarkCount  = 0; //在引号内
    prevComma = 0;
    prevChar = ' ';
    for (i = 0; i < length; i++) {
    currChar = params.charAt(i);//.substring(i, i + 1);
    if (quotMarkCount == 0 && currChar == '(')
    bracketCount++;
    else if (quotMarkCount == 0 && currChar == ')')
    bracketCount--;
    else if (currChar == '\'' || currChar == '\"')
    {
    if (prevChar != '\\')
    {
    if (quotMarkCount > 0)
    quotMarkCount--;
    else
    quotMarkCount++;
    }
    }
    else if (bracketCount == 0 && quotMarkCount == 0 && currChar == seperator)
    {
    list.add(params.substring(prevComma, i).trim());
    prevComma = i + 1;
    }
    prevChar = currChar;
    }

    list.add(params.substring(prevComma, params.length()).trim());