当前位置: 代码迷 >> J2SE >> 括号内有分隔符的字符串分割解决思路
  详细解决方案

括号内有分隔符的字符串分割解决思路

热度:118   发布时间:2016-04-24 01:42:02.0
括号内有分隔符的字符串分割
如何分割括号内有分隔符的字符串?
就是要无视掉括号中的分隔符
比如
Java code
public class HelloWorld {    public static void main(String[] args) {        String str = "a(1,(2,3),4)b,bc(4,5),(6,7)cd";        /*         * how to get:         *          * 1. a(1,(2,3),4)b         * 2. bc(4,5)         * 3. (6,7)cd         */    }}


------解决方案--------------------
写了一段,一般情况下能用,没考虑特殊情况
Java code
public static void main(String[] e) {        String str = "a(1,(2,3),4)b,bc(4,5),(6,7)cd";        char[] cs = str.toCharArray();        int layer = 0;        List<Integer> indexs = new ArrayList<Integer>();        List<String> strs = new ArrayList<String>();        for(int i = 0; i < cs.length; i++){            if(layer == 0 && ',' == cs[i]){                indexs.add(new Integer(i));            }            if('('== cs[i]){                layer++;            }else if(')'== cs[i] && layer > 0){                layer--;            }        }        for(int i = 0; i < indexs.size(); i++){            if(i == 0){                strs.add(str.substring(0, indexs.get(i)));            }else{                strs.add(str.substring(indexs.get(i - 1) + 1, indexs.get(i)));            }            if( i == indexs.size() - 1){                strs.add(str.substring(indexs.get(i) + 1));            }        }                for(String ss : strs){            System.out.println(ss);        }    }
------解决方案--------------------
Java code
//改一个bugpublic static void main(String[] args) {        String str = "a(1,(2,3),4)b,bc(4,5),(6,7)cd,qwqw";        String arr[] = str.split(",(?=[^)(]*?(\\([^)(]*?\\),?)*[^)(]*$)");        for(int i=0;i<arr.length;i++){            System.out.println(arr[i]);        }    }
  相关解决方案