字符串是以下所例:
String s= "{if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}else if(F&&G){X1=4;X=5;X3=6}else if(H&&I){X1=40;X=50;X3=60}}}";
现在想用程序拆分为以X1=?;X=?;X=3为结果,拆分成三个字符串,
如:
1."{if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}}"
2."{if(A&&B){if(B&&C){if(F&&G){X1=4;X2=5;X=6}}"
3."{if(A&&B){if(B&&C){if(H&&I){X1=40;X2=50;X=60}}"

解决方案 »

  1.   

    意思现在有一个字符串"{if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}else if(F&&G){X1=4;X=5;X3=6}else if(H&&I){X1=40;X=50;X3=60}}}"{X1;X2;X3}这三个里面是一个输出,我要把这个表达式拆分成3个字符串,因为有三个输出。拆分后的结果是:
    1."{if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}}"
    2."{if(A&&B){if(B&&C){if(F&&G){X1=4;X2=5;X=6}}"
    3."{if(A&&B){if(B&&C){if(H&&I){X1=40;X2=50;X=60}}"
      

  2.   

     
    daiqianjie能否在具体一点
      

  3.   

    String str = "{if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}else if(F&&G){X1=4;X=5;X3=6}else if(H&&I){X1=40;X=50;X3=60}}}";
    String str1 = str.substring(0, str.indexOf("else if"));
    String str2 = str.substring(str.indexOf("else if"));
    String head = str1.substring(0, str1.lastIndexOf("if"));

    System.out.println(str1);    //第一个字符串
    String[] tails = str2.split("else ");
    for(int i=1;i<tails.length;i++){
    System.out.println(head+tails[i]); //依次输出下面的字符串
    }
    大括号不平衡自己再稍微处理下
      

  4.   

    njustgirl说的方法不行,不能写的这么死。以下为例:
    {if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}else if(F&&G){X1=4;X=5;X3=6}else if(H&&I){X1=40;X=50;X3=60}}else if(K&&L){X1=400;X=500;X3=600}}像你说的方法,拆分就会成为:
    {if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}
    {if(A&&B){if(B&&C){if(F&&G){X1=4;X=5;X3=6}
    {if(A&&B){if(B&&C){if(H&&I){X1=40;X=50;X3=60}}
    {if(A&&B){if(B&&C){if(K&&L){X1=400;X=500;X3=600}}
    像最后一个拆分就是错误的。应该拆分成
    {if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}
    {if(A&&B){if(B&&C){if(F&&G){X1=4;X=5;X3=6}
    {if(A&&B){if(B&&C){if(H&&I){X1=40;X=50;X3=60}}
    {if(A&&B)if(K&&L){X1=400;X=500;X3=600}}
      

  5.   


    /**
     * 基本思路: else分割,替换最后一个if里面的表达式, 分割多少长度,就有多少种组合
     */
    public static void get3() {
    // 是否匹配
    int len = -1;
    // 替换正则,当字符串的规则变化时,正则也要做相应的修改
    String reg = "if\\(\\w\\&\\&\\w\\)\\{(\\w\\d?\\=\\d\\d*;?){3}\\}";
    String s = "if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}else" +
    " if(F&&G){X1=4;X=5;X3=6}else if(H&&I){X1=40;X=50;X3=60}}else" +
    " if(K&&L){X1=400;X=500;X3=600}}";
    String s1 = "{if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}else if(F&&G){X1=4;X=5;X3=6}else if(H&&I){X1=40;X=50;X3=60}}}";
    String[] arr = s1.split("else"); if (arr.length == 0) {
    System.out.println("no");
    return;
    }
    if (arr.length == 1) {
    System.out.println(arr[0]);
    return;
    } for (int i = 0; i < arr.length; i++) {
    if (i == 0 && len < 1) {
    System.out.println(arr[0].trim());
    Matcher m = Pattern.compile(reg).matcher(arr[0].trim());
    if (m.find()) {
    len = arr[0].indexOf(m.group());
    }
    } else {
    if (len > 1) {
    //除掉最后一个}
    if(i == arr.length - 1){
    System.out.println(arr[0].substring(0, len) + arr[i].trim().substring(0, arr[i].trim().length() - 1));
    continue;
    }
    System.out.println(arr[0].substring(0, len) + arr[i].trim());
    } else {
    System.out.println("字符串规则不对,重写正则!");
    }
    }
    }
    }
      

  6.   

    不就是把else if用换行符替换下么
      

  7.   


    import java.util.regex.*;public class Split { public static void main(String args[])
    {
    String str="{if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}else if(F&&G){X1=4;X=5;X3=6}else if(H&&I){X1=40;X=50;X3=60}}}}";
    Matcher m=Pattern.compile("\\{(.+)\\{(.+)\\{(.+)\\{(.+)\\}else (.+)\\{(.+)\\}else (.+)\\{(.+)\\}\\}\\}\\}").matcher(str);
    while(m.find())
    {
    for(int j=1;j<=m.groupCount();j++)
    System.out.println(m.group(j)+" ");

    }

    }
    }用正则分离开这样可以吗
      

  8.   

    如果你是考虑内括号中的内容是不定的可以先将其中的内容整体匹配出来在利用else 分割
    import java.util.regex.*;public class Split { public static void main(String args[])
    {
    String regex1="\\{(.+)\\{(.+)\\{(.+)\\{(.+)\\}else (.+)\\{(.+)\\}else (.+)\\{(.+)\\}\\}\\}\\}";
    String str="{if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}else if(F&&G){X1=4;X=5;X3=6}else if(H&&I){X1=40;X=50;X3=60}}}}";
    String last=null;
    Matcher m=Pattern.compile("\\{(if\\(\\w\\&\\&\\w\\))\\{(if\\(\\w\\&\\&\\w\\))\\{(.+)\\}\\}\\}").matcher(str);
    while(m.find())
    {
    for(int j=0;j<=m.groupCount();j++)
    System.out.println(m.group(j)+" ");

    last=m.group(m.groupCount());
    }
    String s[]=last.split("else ");
    for(int j=0;j<s.length;j++)
    System.out.println(s[j]);

    }
    }
      

  9.   

    14楼和16楼的方法都没有实现。当解析
    {if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}else if(F&&G){X1=4;X=5;X3=6}else if(H&&I){X1=40;X=50;X3=60}}else if(K&&L){X1=400;X=500;X3=600}}}这个字符串的时候,结果都是不正确的,正确的应该是:
    {if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}
    if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}
    if(A&&B){if(B&&C){if(F&&G){X1=4;X=5;X3=6}
    if(A&&B){if(B&&C){if(H&&I){X1=40;X=50;X3=60}}
    if(A&&B){if(K&&L){X1=400;X=500;X3=600}
    在最后一个都有错误 ,不过有了上面的例子,明天上班的时候想想就应该能出来了!
      

  10.   

    很明显是  字符串分割啊  split  按 else 分割如果你还要检验 字符串的正确性 就麻烦了  正则表达式 乱套的很  不过要是写也能写出来 分割下 用正则验证下结果 防止异常
      

  11.   

    import java.io.*;
    import java.util.Arrays;
    public class Test {
    public static void main(String[] args) throws IOException {
    String s= "{if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}" +
    "else if(F&&G){X1=4;X=5;X3=6}else if(H&&I){X1=40;X=50;X3=60}}}";
    String[] str = s.split("else");
    System.out.println(Arrays.toString(str)); }
    }
      

  12.   

    正则表达式不会拆分,用栈吧:public static void main(String[] args) {
    String str = "{if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}else if(F&&G){X1=4;X=5;X3=6}else if(H&&I){X1=40;X=50;X3=60}}else if(K&&L){X1=400;X=500;X3=600}}}";
    str = str.replaceAll("else", "");

    List<String> strList = new ArrayList<String>();
    Stack<Character> stack = new Stack<Character>();
    char[] charArray = str.toCharArray();

        for(int i = 0; i < charArray.length; i++){
         if(charArray[i] == ' ') continue;
         stack.push(charArray[i]);
         if(charArray[i] == '}'){
         splitString(strList, stack);
         }
        }
        
        for(String obj : strList){
         System.out.println(obj);
        }
    } private static void splitString(List<String> strList, Stack<Character> stack) {
    if(stack == null || stack.isEmpty()) return ;
    int count = sumLeftKuoHao(stack);
    char c = stack.pop();
    c = stack.peek();
    if(c == '{'){
    int endIndex = 0;
    while(!stack.isEmpty()){
    c = stack.pop();
    if(c == '{') endIndex++;
    if(endIndex == 2){
    stack.push(c);
    break;
    }
    }
    }else{
    StringBuilder sb = new StringBuilder();
    for(int i = 0 ; i < count; i++){
    sb.append("}");
    }

    int endIndex = 0;
    while(true){
    c = stack.pop();
    if(c == '{') endIndex++;
    if(endIndex == 2){
    stack.push(c);
    break;
    }else{
    sb.append(c);
    }
    }
    String suffix = sb.reverse().toString();
    sb.delete(0, suffix.length());

    Character[] cArr = new Character[stack.size()];
    cArr = stack.toArray(cArr);
    for(char ch : cArr){
    sb.append(ch);
    }

    strList.add(sb.toString() + suffix);
    }
    } private static int sumLeftKuoHao(Stack<Character> stack) {
    if(stack == null || stack.isEmpty()) return 0;
    int sum = 0;
    Character[] cArr = new Character[stack.size()];
    cArr = stack.toArray(cArr);
    for(char c : cArr){
    if(c == '{') sum++;
    }
    return sum;
    }
      

  13.   

    20楼的明显不对,对于这个字符串,你就截不出来了
    {if(A&&B){if(B&&C){if(D&&E){X1=1;X2=2;X=3}else if(F&&G){X1=4;X=5;X3=6}else if(H&&I){X1=40;X=50;X3=60}}else if(K&&L){X1=400;X=500;X3=600}}}