String str="$v5(cas:ProvisionForImpairmentOfNotesReceivable,end)
 = 
$v1(cas:ProvisionForImpairmentOfNotesReceivableIncreaseInCurrentPeriod,start)
 - $v2(cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodReverse)
 - $v3(cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodWriteOff)
 + 
$v4(cas:ProvisionForImpairmentOfNotesReceivable)"  我想把上面这个字符串截取成 $v5=$v1-$v2-$v3+$v4
  并且$v5括号对应的值能够根据v5能找到 $v2和$v3和$v1同样!

解决方案 »

  1.   

     
     String str="$v5(cas:ProvisionForImpairmentOfNotesReceivable,end)="$v1(cas:ProvisionForImpairmentOfNotesReceivableIncreaseInCurrentPeriod,start)-$v2(cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodReverse)-$v3(cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodWriteOff)+$v4(cas:ProvisionForImpairmentOfNotesReceivable)"; 这是一个字符串 是个公式 我现在想把这个字符进行截取 成 $v5=$v1-$v2-$v3+$v4 
      而括号里的值是 $v5,$v1,$v2,$v3,$v4值 怎么把上面复杂的字符串分解出来 公式是公式 值是值
      

  2.   

    String str="$v5(cas:ProvisionForImpairmentOfNotesReceivable,end)="$v1(cas:ProvisionForImpairmentOfNotesReceivableIncreaseInCurrentPeriod,start)-$v2(cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodReverse)-$v3(cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodWriteOff)+$v4(cas:ProvisionForImpairmentOfNotesReceivable)";
       你仔细看我的字符串 应该还是好理解的
      

  3.   


      str.replaceAll("\\([^\\)]*\\)", ""); 
      

  4.   

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class Test {
        public static void main(String[] args) {
            String str = "$v5(cas:ProvisionForImpairmentOfNotesReceivable,end)=$v1(cas:ProvisionForImpairmentOfNotesReceivableIncreaseInCurrentPeriod,start)-$v2(cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodReverse)-$v3(cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodWriteOff)+$v4(cas:ProvisionForImpairmentOfNotesReceivable)";
            String expression = str.replaceAll("\\(.*?\\)", "");
            System.out.println(expression);
            
            Pattern pattern = Pattern.compile("(\\$v\\d+)\\((.+?)\\)");
            Matcher matcher = pattern.matcher(str);
            while (matcher.find()) {
                System.out.printf("%s : %s\n", matcher.group(1), matcher.group(2));
            }
        }
    }
      

  5.   

    输出
    $v5=$v1-$v2-$v3+$v4
    $v5 : cas:ProvisionForImpairmentOfNotesReceivable,end
    $v1 : cas:ProvisionForImpairmentOfNotesReceivableIncreaseInCurrentPeriod,start
    $v2 : cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodReverse
    $v3 : cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodWriteOff
    $v4 : cas:ProvisionForImpairmentOfNotesReceivable
      

  6.   


      $v5=$v1-$v2-$v3+$v4
    $v5 : cas:ProvisionForImpairmentOfNotesReceivable,end
    =$v1 : cas:ProvisionForImpairmentOfNotesReceivableIncreaseInCurrentPeriod,start
    -$v2 : cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodReverse
    -$v3 : cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodWriteOff
    +$v4 : cas:ProvisionForImpairmentOfNotesReceivable  可以输出这样的值嘛?
      

  7.   

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class Test {
        public static void main(String[] args) {
            String str = "$v5(cas:ProvisionForImpairmentOfNotesReceivable,end)=$v1(cas:ProvisionForImpairmentOfNotesReceivableIncreaseInCurrentPeriod,start)-$v2(cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodReverse)-$v3(cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodWriteOff)+$v4(cas:ProvisionForImpairmentOfNotesReceivable)";
            String expression = str.replaceAll("\\(.*?\\)", "");
            System.out.println(expression);        Pattern pattern = Pattern.compile("([\\-\\+\\*/=]?\\$v\\d+)\\((.+?)\\)");
            Matcher matcher = pattern.matcher(str);
            while (matcher.find()) {
                System.out.printf("%s : %s\n", matcher.group(1), matcher.group(2));
            }
        }
    }
    输出
    $v5=$v1-$v2-$v3+$v4
    $v5 : cas:ProvisionForImpairmentOfNotesReceivable,end
    =$v1 : cas:ProvisionForImpairmentOfNotesReceivableIncreaseInCurrentPeriod,start
    -$v2 : cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodReverse
    -$v3 : cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodWriteOff
    +$v4 : cas:ProvisionForImpairmentOfNotesReceivable
      

  8.   

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class Test {
        public static void main(String[] args) {
            String str = "$v5(cas:ProvisionForImpairmentOfNotesReceivable,end)=$v1(cas:ProvisionForImpairmentOfNotesReceivableIncreaseInCurrentPeriod,start)-$v2(cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodReverse)-$v3(cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodWriteOff)+$v4(cas:ProvisionForImpairmentOfNotesReceivable)";
            String expression = str.replaceAll("\\(.*?\\)", "");
            System.out.println(expression);        Pattern pattern = Pattern.compile("([\\-\\+\\*/=]?)(\\$v\\d+)\\((.+?)\\)");
            Matcher matcher = pattern.matcher(str);
            while (matcher.find()) {
                System.out.printf("%1s %s : %s\n", matcher.group(1), matcher.group(2), matcher.group(3));
            }
        }
    }输出
    $v5=$v1-$v2-$v3+$v4
      $v5 : cas:ProvisionForImpairmentOfNotesReceivable,end
    = $v1 : cas:ProvisionForImpairmentOfNotesReceivableIncreaseInCurrentPeriod,start
    - $v2 : cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodReverse
    - $v3 : cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodWriteOff
    + $v4 : cas:ProvisionForImpairmentOfNotesReceivable
      

  9.   

    遍历  
    遇见左括号(cas: 就开始记录  遇见右括号就停止记录
    把字符串放到集合中
    最后把记录下来的字符串集合 遍历从原字符串中替换掉
      

  10.   

    用正则  把 $XX :( cas:XXXX)  替换为 $XX 
      

  11.   

    System.out.println(str.replaceAll("\\(", " : ").replaceAll("\\)", "\n "));
      

  12.   

    System.out.println(str.replaceAll("\\(", " : ").replaceAll("\\)", "\n ").replaceAll("\\=", "= "));
      

  13.   

    我还以为 我的效率低呢 
    看看了看时间  还是正则类 效率低 
    以后还是 少用 正则类判断[code=java] public static void main(String[] args) {
    String str = "$v5(cas:ProvisionForImpairmentOfNotesReceivable,end)=$v1(cas:ProvisionForImpairmentOfNotesReceivableIncreaseInCurrentPeriod,start)-$v2(cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodReverse)-$v3(cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodWriteOff)+$v4(cas:ProvisionForImpairmentOfNotesReceivable)";
    //String s[] =str.split("\\=|\\+|\\-");
    // System.out.println(str.replaceAll("\\([^\\)]*\\)", "")); 

    long l3=System.currentTimeMillis();
    System.out.println("  "+(str.replaceAll("\\(", " : ").replaceAll("\\)", "\n").replaceAll("\\=", "= ").replaceAll("\\+", "+ ").replaceAll("\\-", "- ")));
    long l4=System.currentTimeMillis();
    System.out.println(l4-l3);

    System.out.println();
    long l1=System.currentTimeMillis();
    Pattern pattern = Pattern.compile("([\\-\\+\\*/=]?)(\\$v\\d+)\\((.+?)\\)");
            Matcher matcher = pattern.matcher(str);
            while (matcher.find()) {
                System.out.printf("%1s %s : %s\n", matcher.group(1), matcher.group(2), matcher.group(3));
            }
            long l2=System.currentTimeMillis();
            System.out.println(l2-l1);
    }[code]  $v5 : cas:ProvisionForImpairmentOfNotesReceivable,end
    = $v1 : cas:ProvisionForImpairmentOfNotesReceivableIncreaseInCurrentPeriod,start
    - $v2 : cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodReverse
    - $v3 : cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodWriteOff
    + $v4 : cas:ProvisionForImpairmentOfNotesReceivable0  $v5 : cas:ProvisionForImpairmentOfNotesReceivable,end
    = $v1 : cas:ProvisionForImpairmentOfNotesReceivableIncreaseInCurrentPeriod,start
    - $v2 : cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodReverse
    - $v3 : cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodWriteOff
    + $v4 : cas:ProvisionForImpairmentOfNotesReceivable
    31反过来:  $v5 : cas:ProvisionForImpairmentOfNotesReceivable,end
    = $v1 : cas:ProvisionForImpairmentOfNotesReceivableIncreaseInCurrentPeriod,start
    - $v2 : cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodReverse
    - $v3 : cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodWriteOff
    + $v4 : cas:ProvisionForImpairmentOfNotesReceivable
    47  $v5 : cas:ProvisionForImpairmentOfNotesReceivable,end
    = $v1 : cas:ProvisionForImpairmentOfNotesReceivableIncreaseInCurrentPeriod,start
    - $v2 : cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodReverse
    - $v3 : cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodWriteOff
    + $v4 : cas:ProvisionForImpairmentOfNotesReceivable0