2014-10-09 98 views
1

第一个值我有一个CSV文件看起来像这样:正则表达式表达在java中删除CSV

12,2014-10-09 06:00:00,2014-10-09 06:15:00,"","","","123,456","","9,999","","" 

我能够代替逗号插图中的数字和所有双quoutes使用:

String test = rowData.replaceAll("([0-9]),([0-9])","$1$2").replaceAll("\"",""); 

我不确定这是否是最好的方法来做到这一点(意见是赞赏)。我的问题是我还需要逗号之前删除的第一个值,所以基本上我的输出需要是这样的

Orig: 12,2014-10-09 06:00:00,2014-10-09 06:15:00,"","","","123,456","","9,999","","" 
Need: 2014-10-09 06:00:00,2014-10-09 06:15:00,,,,123456,,9999,, 

我是否需要另一个正则表达式来做到这一点,因为我不不知道知道如何确切或使用lastindex或firstindex之类的东西来删除逗号的第一个值?谢谢

编辑:我只是注意到我不能使用([0-9]),([0-9])导致它也删除逗号为日期时间。 。:(正确的问题是,如何更换CSV删除: 1.第一个值 2.引号位之间 3.逗号和报价

回答

1

,以符合您期望的输出,你可以这样做

String str = "12,2014-10-09 06:00:00,2014-10-09 " 
    + "06:15:00,\"\",\"\",\"\",\"123,456\",\"\",\"9,999\",\"\",\"\""; 
str = str.substring(str.indexOf(',') + 1); 
str = str.replaceAll("\"(\\d+),(\\d+)\"", "$1$2").replace("\"", ""); 
String expected = "2014-10-09 06:00:00,2014-10-09 06:15:00,,,,123456,,9999,,"; 
System.out.println(str.equals(expected)); 

输出是

true 
+0

谢谢。我也有一个有2个逗号的数字,“999,999,999”,所以我只是增加了一个额外的行str = str.replaceAll(“\”(\\ d +),(\\ d +),(\\ d +)\“”, “$ 1 $ 2 $ 3”);. :) – 2014-10-09 01:32:56

2

试试这个:

String test = rowData.replaceAll("^[^,]+|,(?!(([^\"]*\"){2})*[^\"]*$|\"(?=,)|(?<=,)\"", ""); 

有三种这与空白(即删除)更换交替:

  • 一切直到并包括第一个逗号
  • 所有逗号内引用(那些不followe d。通过偶数引号),毗邻
  • 所有的报价(即之前或之后)逗号
0

试试这个

test = test.substring(test.indexOf(",") + 1, test.length()); 

原因,这是优于其他人回答:更少的开销,这不需要正则表达式!