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同样!
解决方案 »
- private static final long serialVersionUID = 1L;问题
- SOCKET编程问题,在win2000和win-xp环境下结果不一样
- 怎么给JPanel组件指定位置?
- 错误:java.lang.UnsupportedClassVersionError
- HashMap和HashTable的区别 谁能给我用程序解释下
- 求助!*.jar文件用什么软件打开,可以在windows平台上看到里面的内容!
- 如何将一个较大的图像加载到一个面积较小的组件上,就是希望图像能按比例缩小,送分!!!!!!!
- JAVA高手请进。。。
- JTS,EJB,JavaBean,JDBC,JMSF都是些什么东西?
- java api
- 一个Java GUI的程序 无法 运行。哪位大哥帮忙解决
- java操作sqlserver数据库问题
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值 怎么把上面复杂的字符串分解出来 公式是公式 值是值
你仔细看我的字符串 应该还是好理解的
str.replaceAll("\\([^\\)]*\\)", "");
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
$v5=$v1-$v2-$v3+$v4
$v5 : cas:ProvisionForImpairmentOfNotesReceivable,end
=$v1 : cas:ProvisionForImpairmentOfNotesReceivableIncreaseInCurrentPeriod,start
-$v2 : cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodReverse
-$v3 : cas:ProvisionForImpairmentOfNotesReceivableDecreaseInCurrentPeriodWriteOff
+$v4 : cas:ProvisionForImpairmentOfNotesReceivable 可以输出这样的值嘛?
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
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
遇见左括号(cas: 就开始记录 遇见右括号就停止记录
把字符串放到集合中
最后把记录下来的字符串集合 遍历从原字符串中替换掉
看看了看时间 还是正则类 效率低
以后还是 少用 正则类判断[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