用正则表达式处理个字符串 本帖最后由 Evenque 于 2010-06-07 17:29:36 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public static void main(String args[]){ String s1 = "2010-05-07,\"转账\",\"0\",\"00000000000000000\",\"某某公司\",\"2902002109023007384\",\"上交款\",\"3,000.00\",\"0.00\",\"46,440,431.60\""; StringBuffer sb= new StringBuffer(); java.util.regex.Pattern p=java.util.regex.Pattern.compile("(\"[^\"]+\")") ; java.util.regex.Matcher m=p.matcher(s1); while(m.find()){ m.appendReplacement(sb,m.group(1).replace(",","")); } m.appendTail(sb); System.out.println(sb.toString()); } //package com.ricky.www;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Test{ public static void main(String[] args){ String s1 = "2010-05-07,\"转账\",\"0\",\"00000000000000000\",\"某某公司\",\"2902002109023007384\",\"上交款\",\"3,000.00\",\"0.00\",\"46,440,431.60\""; System.out.println(s1); s1 = format(s1); System.out.println(s1); } public static String format(String content){ String result = null; String regex = "(,(\\d{3}))((,(\\d{3}))*)"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(content); while(matcher.find()){ //System.out.println("ricky"); content = content.replace(matcher.group(),matcher.group(2) + matcher.group(3)); matcher = pattern.matcher(content); } return content; }} 很简单:s1 = s1.replaceAll("(\\d+),(\\d)", "$1$2"); s1.replaceAll("(?:,(?=[0-9]{3}))+", "") 你这个能处理"xxx,xxx,xxx.xx"的格式,但是把其他不是这种格式的也处理了。比如,超过1000的数才会有"xx,xxx,xx.xx"这样的格式,比如:s1 = "2010-4-1,转账,0,0,某某有限责任公司,\"2904000109048122636\",货款,960,0,\"31,104,705.73\"";这里,你这个正则表达式,把960,0也处理成了9600了。其实应该是:960,0,"31104705.73"现在我想用个正则表达式,把"xx,xxx,xx.xx"或者"xx,xxx.xx"这两种格式里的逗号去掉,注意是带""号的。 两种情况,有的不超过千位的就不加双引号,比如:960,0,"123,456.00"也有全部加了双引号的,比如:"0.00","100.00","21,345,678.99"所以下载只要把"x,xxx,xxx.xx"或者"xxx,xxx.xx"这种格式的处理,归纳下就是有x为数字,有双引号,有逗号,如果有几个逗号,逗号与逗号之间是三个数。可参照下这个帖子:http://topic.csdn.net/u/20100531/14/ea8d087e-3810-43fd-bb4e-e33ece0e54ab.html 不能处理啊,你用String str = "2010-4-1,转账,0,0,某某有限责任公司,\"2904000109048122636\",货款,960,\"100,000.90\",\"31,104,705.73\"";试试看。 简单万岁String s1 = "2010-05-07,\"转账\",\"0\",\"00000000000000000\",\"某某公司\",\"2902002109023007384\",\"上交款\",\"3,000.00\",\"0.00\",\"46,440,431.60\""; s1 = s1.replace(",", ""); s1 = s1.replace("\"", ",\""); s1 = s1.replace(",\",", "\","); s1 = s1.replace("\"", ""); s1 = s1.replace(",", ";"); System.out.println(s1); "xx,xxx,xxx.xx"归纳下:""号在两侧,里面有,号和.号,x都为0-9的数字,如果有多个,号则,号和,号之间肯定是三位数,肯定有.号,.号后面肯定是两位数。 s1.replaceAll("(?:,(?=\\d{3}(?:,\\d{3})*(?:\\.\\d+)?\"))", "") 那为什么我测试是可以的?public class LogAnalysisMain { public static void main(String[] args) throws IOException { String s1 = "2010-05-07,\"转账\",\"0\",\"00000000000000000\",\"某某公司\",\"2902002109023007384\",\"上交款\",\"3,000.00\",\"0.00\",\"46,440,431.60\""; System.out.println(s1); s1 = s1.replaceAll("(?:,(?=[0-9]{3}))+", ""); System.out.println(s1); }}输出:2010-05-07,"转账","0","00000000000000000","某某公司","2902002109023007384","上交款","3,000.00","0.00","46,440,431.60"2010-05-07,"转账","0","00000000000000000","某某公司","2902002109023007384","上交款","3000.00","0.00","46440431.60" java定时器??? JAVA数据类型 怎么实现用字符串调用以该字符串命名的变量 访问远程文件的问题 想升本了,不知应怎么办,各位兄弟指点一下吧! jdk1.5 有知道理想信息(深圳分公司)的么,顺便散纷 怎么实现共享session 菜鸟问软件配置问题,希望各位大虾指点 关于prepareStatement.setCharacterStream的问题? 一则随机数取值范围的疑惑 JAVA 关于四舍五入的问题
public static void main(String args[]){
String s1 = "2010-05-07,\"转账\",\"0\",\"00000000000000000\",\"某某公司\",\"2902002109023007384\",\"上交款\",\"3,000.00\",\"0.00\",\"46,440,431.60\"";
StringBuffer sb= new StringBuffer();
java.util.regex.Pattern p=java.util.regex.Pattern.compile("(\"[^\"]+\")") ;
java.util.regex.Matcher m=p.matcher(s1);
while(m.find()){
m.appendReplacement(sb,m.group(1).replace(",",""));
}
m.appendTail(sb);
System.out.println(sb.toString());
}
//package com.ricky.www;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Test{
public static void main(String[] args){
String s1 = "2010-05-07,\"转账\",\"0\",\"00000000000000000\",\"某某公司\",\"2902002109023007384\",\"上交款\",\"3,000.00\",\"0.00\",\"46,440,431.60\"";
System.out.println(s1);
s1 = format(s1);
System.out.println(s1);
} public static String format(String content){
String result = null;
String regex = "(,(\\d{3}))((,(\\d{3}))*)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(content);
while(matcher.find()){
//System.out.println("ricky");
content = content.replace(matcher.group(),matcher.group(2) + matcher.group(3));
matcher = pattern.matcher(content);
}
return content;
}
}
s1 = s1.replaceAll("(\\d+),(\\d)", "$1$2");
s1 = "2010-4-1,转账,0,0,某某有限责任公司,\"2904000109048122636\",货款,960,0,\"31,104,705.73\"";
这里,你这个正则表达式,把960,0也处理成了9600了。其实应该是:960,0,"31104705.73"现在我想用个正则表达式,把"xx,xxx,xx.xx"或者"xx,xxx.xx"这两种格式里的逗号去掉,注意是带""号的。
也有全部加了双引号的,比如:"0.00","100.00","21,345,678.99"所以下载只要把"x,xxx,xxx.xx"或者"xxx,xxx.xx"这种格式的处理,归纳下就是有x为数字,有双引号,有逗号,如果有几个逗号,逗号与逗号之间是三个数。
可参照下这个帖子:
http://topic.csdn.net/u/20100531/14/ea8d087e-3810-43fd-bb4e-e33ece0e54ab.html
String str = "2010-4-1,转账,0,0,某某有限责任公司,\"2904000109048122636\",货款,960,\"100,000.90\",\"31,104,705.73\"";
试试看。
String s1 = "2010-05-07,\"转账\",\"0\",\"00000000000000000\",\"某某公司\",\"2902002109023007384\",\"上交款\",\"3,000.00\",\"0.00\",\"46,440,431.60\"";
s1 = s1.replace(",", "");
s1 = s1.replace("\"", ",\"");
s1 = s1.replace(",\",", "\",");
s1 = s1.replace("\"", "");
s1 = s1.replace(",", ";");
System.out.println(s1);
那为什么我测试是可以的?public class LogAnalysisMain { public static void main(String[] args) throws IOException {
String s1 = "2010-05-07,\"转账\",\"0\",\"00000000000000000\",\"某某公司\",\"2902002109023007384\",\"上交款\",\"3,000.00\",\"0.00\",\"46,440,431.60\"";
System.out.println(s1);
s1 = s1.replaceAll("(?:,(?=[0-9]{3}))+", "");
System.out.println(s1);
}
}输出:2010-05-07,"转账","0","00000000000000000","某某公司","2902002109023007384","上交款","3,000.00","0.00","46,440,431.60"
2010-05-07,"转账","0","00000000000000000","某某公司","2902002109023007384","上交款","3000.00","0.00","46440431.60"