我有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))都是C开头的然后后面一堆数字,这些计数进行运算,还有还有可能重复我想把里面的C301790860 C301790858 C301120543等等解析出来,重复的只要1个,谢谢
如果是的话,看看下面的代码
String target = "(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[] ps = target.split("\\p{Punct}");
Set<String> ss = new HashSet<String>();
for(String str : ps){
if(!str.trim().equals("")){
ss.add(str);
}
}
for(String str : ss){
System.out.println(str);
}
不知道楼主是这意思不?
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/package test;import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/**
*
* @author Administrator
*/
public class Main { /**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Set<String> set=new HashSet<String>();
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)) ";
String regex="C\\d+";
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(str);
while(matcher.find()){
set.add(matcher.group());
}
Iterator iter=set.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
}}
(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))怎么把C开头的全解析出来呢?
import java.util.HashMap;
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 = "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)) ";
Iterator ite = getIteratorStringC(testString);
while(ite.hasNext()){
//全部打出
System.out.println(ite.next().toString());
}
}
}输出:
C301120548
C301120561
C301120566
C301790858
C301120546
C301120565
C301120549
C301120545
C301120562
C301790860
C301120563
C301120544
C301120564
C301120543
C301120560
C301120547
C301120567
//测试
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";
Iterator ite = getIteratorStringC(testString+pstring1+pstring2);
while(ite.hasNext()){
//全部打出
System.out.println(ite.next().toString());
}
}
输出
C301120548
C301120561
C300023
C301120566
C301790858
C301120546
C30129
C301120565
C301120549
C301120545
C301120562
C301790860
C301120563
C30145
C301120544
C300025
C301120564
C30123
C301120543
C301120560
C301120547
C301120567
wo ye xaing zhi dao
也就是以所有标点符号来切割
内嵌的正则表达式,类似的还有如下,
POSIX 字符类(仅 US-ASCII)
\p{Lower} 小写字母字符:[a-z]
\p{Upper} 大写字母字符:[A-Z]
\p{ASCII} 所有 ASCII:[\x00-\x7F]
\p{Alpha} 字母字符:[\p{Lower}\p{Upper}]
\p{Digit} 十进制数字:[0-9]
\p{Alnum} 字母数字字符:[\p{Alpha}\p{Digit}] \p{Graph} 可见字符:[\p{Alnum}\p{Punct}]
\p{Print} 可打印字符:[\p{Graph}\x20]
\p{Blank} 空格或制表符:[ \t]
\p{Cntrl} 控制字符:[\x00-\x1F\x7F]
\p{XDigit} 十六进制数字:[0-9a-fA-F]
\p{Space} 空白字符:[ \t\n\x0B\f\r]