如果假设P30012 = C300023 - C30145+C30123;P30013 = C300025 - C30145+C30129
(C301790860/C301790858)((C301120543+C301120544+C301120545+C301120546+C301120547+C301120548+C301120549-C301120560-C301120561-C301120562-C301120563-C301120564-C301120565-C301120566-C301120567)/(C301120543+C301120544+C301120545+C301120546+C301120547+C301120548+C301120549))
变成了
P300012*P30013*(C301790860/C301790858)((C301120543+C301120544+C301120545+C301120546+C301120547+C301120548+C301120549-C301120560-C301120561-C301120562-C301120563-C301120564-C301120565-C301120566-C301120567)/(C301120543+C301120544+C301120545+C301120546+C301120547+C301120548+C301120549))
//
这里P开头的可能不止2个,可能有很多个
怎么把C开头的全解析出来呢?附原帖地址:http://topic.csdn.net/u/20090612/21/e071246e-d691-40ae-a057-52d849621a3d.html?seed=2085711641
内容:我有1个公式 他可能现在这样的
(C301790860/C301790858)((C301120543+C301120544+C301120545+C301120546+C301120547+C301120548+C301120549-C301120560-C301120561-C301120562-C301120563-C301120564-C301120565-C301120566-C301120567)/(C301120543+C301120544+C301120545+C301120546+C301120547+C301120548+C301120549)) 都是C开头的然后后面一堆数字,这些计数进行运算,还有还有可能重复 我想把里面的C301790860 C301790858 C301120543等等解析出来,重复的只要1个,谢谢
(C301790860/C301790858)((C301120543+C301120544+C301120545+C301120546+C301120547+C301120548+C301120549-C301120560-C301120561-C301120562-C301120563-C301120564-C301120565-C301120566-C301120567)/(C301120543+C301120544+C301120545+C301120546+C301120547+C301120548+C301120549))
变成了
P300012*P30013*(C301790860/C301790858)((C301120543+C301120544+C301120545+C301120546+C301120547+C301120548+C301120549-C301120560-C301120561-C301120562-C301120563-C301120564-C301120565-C301120566-C301120567)/(C301120543+C301120544+C301120545+C301120546+C301120547+C301120548+C301120549))
//
这里P开头的可能不止2个,可能有很多个
怎么把C开头的全解析出来呢?附原帖地址:http://topic.csdn.net/u/20090612/21/e071246e-d691-40ae-a057-52d849621a3d.html?seed=2085711641
内容:我有1个公式 他可能现在这样的
(C301790860/C301790858)((C301120543+C301120544+C301120545+C301120546+C301120547+C301120548+C301120549-C301120560-C301120561-C301120562-C301120563-C301120564-C301120565-C301120566-C301120567)/(C301120543+C301120544+C301120545+C301120546+C301120547+C301120548+C301120549)) 都是C开头的然后后面一堆数字,这些计数进行运算,还有还有可能重复 我想把里面的C301790860 C301790858 C301120543等等解析出来,重复的只要1个,谢谢
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;public class SplitString { /**
* @param args
*/
public static void main(String[] args) {
String s = "P300012*P30013*(C301790860/C301790858)((C301120543+C301120544+C301120545+C301120546+C301120547+C301120548+C301120549-C301120560-C301120561-C301120562-C301120563-C301120564-C301120565-C301120566-C301120567)/(C301120543+C301120544+C301120545+C301120546+C301120547+C301120548+C301120549))";
String[] str = s.split("\\+|\\-|\\*|\\/|\\(|\\)");
Set stringSet = new HashSet();
for(int i=0; i < str.length; i++){
if(str[i] != "" && str[i].startsWith("C")){
stringSet.add(str[i]);
}
}
Iterator iter = stringSet.iterator();
while(iter.hasNext()){
System.out.println(iter.next()); }
}}
import java.util.*;public class ExtractC{
public static void main(String[] args){
String s="P30012 = C300023 - C30145+C30123;P30013 = C300025 - C30145+C30129(C301790860/C301790858)((C301120543+C301120544+C301120545+C301120546+C301120547+C301120548+C301120549-C301120560-C301120561-C301120562-C301120563-C301120564-C301120565-C301120566-C301120567)/(C301120543+C301120544+C301120545+C301120546+C301120547+C301120548+C301120549))";
System.out.println(extract(s));
} public static Set<String> extract(String s){
HashSet<String> hs=new HashSet<String>();
Pattern p=Pattern.compile("C\\d+");
Matcher m=p.matcher(s);
while(m.find()){
hs.add(m.group());
}
return hs;
}
}
public static void main(String[] args) throws Exception {
String str = "(C301790860/C301790858)((C301120543+C301120544+C301120545+C301120546+C301120547+C301120548+C301120549-C301120560-C301120561-C301120562-C301120563-C301120564-C301120565-C301120566-C301120567)/(C301120543+C301120544+C301120545+C301120546+C301120547+C301120548+C301120549))"; StringTokenizer st = new StringTokenizer(str ,"C()/+-"); while(st.hasMoreTokens()){
System.out.println(st.nextToken());
} }
所有数字可以提出来..要计算的话我就一点也不行了.我算法是零
import java.util.Iterator;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Test {
/**
* 获得所有以C开发头的不重复的数据
* @param s
* @return Iterator
*/
public static Iterator getIteratorStringC(String s){
//map的key值不能重复 重复数据自动覆盖
Map map = new HashMap();
//匹配以C开头的 或者用C或P开头[CP][0-9]
Pattern p = Pattern.compile("[C][0-9]+");
Matcher m = p.matcher(s);
while(m.find()){
map.put(m.group(), null);
}
return map.keySet().iterator();
}
/**
* 获得所有P开发头的不重复的数据
* @param s
* @return Iterator
*/
public static Iterator getIteratorStringP(String s){
//map的key值不能重复 重复数据自动覆盖
Map map = new HashMap();
//匹配以C开头的 或者用C或P开头[CP][0-9]
Pattern p = Pattern.compile("[P][0-9]+");
Matcher m = p.matcher(s);
while(m.find()){
map.put(m.group(), null);
}
return map.keySet().iterator();
}
//测试
public static void main(String[] ar){
String testString = "(C301790860/C301790858)" +
"((C301120543+C301120544+C301120545+" +
"C301120546+C301120547+C301120548+C301120549-C301120560" +
"-C301120561-C301120562-C301120563-" +
"C301120564-C301120565-C301120566-C301120567)/" +
"(C301120543+C301120544+C301120545+C301120546+" +
"C301120547+C301120548+C301120549))";
Iterator ite = getIteratorStringC(testString);
while(ite.hasNext()){
System.out.println(ite.next().toString());
}
}
}
/**
* 获得所有以C开发头的不重复的数据
* @param s
* @return Iterator
*/
public static Iterator getIteratorStringC(String s){
无论什么字符串都可以取到,这个方法只要你输入一个String,其他不管
把所有的都String都连起来也可以取到啊
/**
* 获得所有以C开发头的不重复的数据
* @param s
* @return Object[]
*/
public static Object[] getIteratorStringC(String s){
// map的key值不能重复 重复数据自动覆盖
Map map = new HashMap();
//匹配以C开头的 或者用C或P开头[CP][0-9]
Pattern p = Pattern.compile("[C][0-9]+");
Matcher m = p.matcher(s);
while(m.find()){
map.put(m.group(), null);
}
Object a[] = (map.keySet().toArray());
//排序
Arrays.sort(a);
return a;
}
//测试
public static void main(String[] ar){
String testString = "P300012*P30013*(C301790860/C301790858)" +
"((C301120543+C301120544+C301120545+" +
"C301120546+C301120547+C301120548+C301120549-C301120560" +
"-C301120561-C301120562-C301120563-C301120564-" +
"C301120565-C301120566-C301120567)/(C301120543+" +
"C301120544+C301120545+C301120546+C301120547+" +
"C301120548+C301120549)) ";
String pstring1="P30012 = C300023 - C30145+C30123";
String pstring2="P30013 = C300025 - C30145+C30129";
Object ite[] = getIteratorStringC(testString+pstring1+pstring2);
for(int i = 0;i<ite.length;i++){
System.out.println(""+ite[i]);
}
}
输出
C300023
C300025
C301120543
C301120544
C301120545
C301120546
C301120547
C301120548
C301120549
C301120560
C301120561
C301120562
C301120563
C301120564
C301120565
C301120566
C301120567
C30123
C30129
C30145
C301790858
C301790860