有一个字符串
String st="WELL^(,3)^(1)A^(,5)D^(,5)^(2)C^(,5)^(2)马五^(5)^(,2)H^(5)^(,2)FF^(,2)";这个字符串会很长是个动态的,我想把它分解后存入一个数组,例如
str[0]="WELL^(,3)^(1)"
str[1]="A^(,5)"
str[2]="D^(,5)^(2)"
str[3]="C^(,5)^(2)"
str[4]="马五^(5)^(,2)"
str[5]="H^(5)^(,2)"
str[6]="FF^(,2)"
str[7]=...
str[8]=...
str[9]=...
str[10]=...请高手指点

解决方案 »

  1.   

    依据就是字母或汉字打头的然后加上后面的括号内容例如:
    WELL^(,3)^(1)A^(,5)这一段,要分解为2个数组元素WELL^(,3)^(1)
    A^(,5)
      

  2.   

    可不可以看成是 C^(,5)^(2)||FF^(,2)这二个模式的匹配呢?
    用正则应该是可以搞定的吧
      

  3.   

    以上面所说的作为二个模式匹配,为每个前面加一个特殊字符作为切割符
    下面是我自己用JS写的,没有处理 中文的
    "WELL^(,3)^(1)A^(,2)".replace(/(\w+(\^\(,?\d\)){1,})/g,"@$1")
      

  4.   

    等待大牛解答,试了集中思路都不行,期待ING
      

  5.   


    public static void test3() {
    String st = "WELL^(,3)^(1)A^(,5)D^(,5)^(2)C^(,5)^(2)马五^(5)^(,2)H^(5)^(,2)FF^(,2)"; String regex = "[a-zA-Z\u4e00-\u9fa5]+";
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(st);
    List<Integer> indexList = new ArrayList<Integer>(0); while (m.find()) {
    indexList.add(m.start());
    } String[] val = new String[indexList.size()];
    indexList.add(st.length()); for (int i = 0; i < indexList.size() - 1; i++) {
    val[i] = st.substring(indexList.get(i), indexList.get(i + 1));
    } System.err.println(java.util.Arrays.toString(val));
    }
    结果:
    [WELL^(,3)^(1), A^(,5), D^(,5)^(2), C^(,5)^(2), 马五^(5)^(,2), H^(5)^(,2), FF^(,2)]

    注意数组越界
      

  6.   

    String st="WELL^(,3)^(1)A^(,5)D^(,5)^(2)C^(,5)^(2)马五^(5)^(,2)H^(5)^(,2)FF^(,2)";
    String[] sa = st.split("(?<=([\\^]\\([,]?\\d\\))([\\^]\\([,]?\\d\\)))");
    System.out.println(Arrays.toString(sa));
      

  7.   

    一次split有点难度,用正则匹配吧
    String st="WELL^(,3)^(1)A^(,5)D^(,5)^(2)C^(,5)^(2)马五^(5)^(,2)H^(5)^(,2)FF^(,2)";
    Pattern p = Pattern.compile("[a-zA-Z\u4e00-\u9fa5]+([\\^]\\([,]?\\d\\)){1,2}");
    Matcher m = p.matcher(st);
    List<String> list = new ArrayList<String>();
    while (m.find()) {
        //System.out.println(m.group());
        list.add(m.group());
    }
    System.out.println(list);
    String[] sa = list.toArray(new String[0]);
      

  8.   


    public static void main(String[] args) {
    //String str1="A^(2)D^(,5)C^(,5)^(2)马五^(5)^(,2)";
    String str1="WELL^(,3)^(1)A^(,5)D^(,5)^(2)C^(,5)^(2)马五^(5)^(,2)H^(5)^(,2)FF^(,2)";
    String arr[] = str1.split("(?<=\\))(?=[\\w\u4e00-\u9fa5])");
    for(int i=0;i<arr.length;i++)
    {
      System.out.println(arr[i]);
    }
    }