2016-04-28 59 views
0

我需要分割并用分号替换字符串。我需要找到String内的所有分号。在双引号之间找到分号JAVA

我有一些字符串或与此类似:

"003628;164332;BICICLETA;000000;\"TI;EH.55; MARC;E: 8ʽ7,7542;9ʽ2;,4)\"2015-03-03 12:25:25.0;2016-03-10 09:13:35.0" 

这里是我的代码:

String p = "(\"[^\"]+);([^\"]+\")" 
    String cad = "003628;164332;BICICLETA;000000;\"TI;EH.55; MARC;E: 8ʽ7,7542;9ʽ2;,4)\"2015-03-03 12:25:25.0;2016-03-10 09:13:35.0" 
    Pattern pat = Pattern.compile(p) 
    Matcher mat = pat.matcher(cad) 
    cad.replaceAll(p, "$1#SEMICOLON#$2") 

错误的结果是:

003628;164332;BICICLETA;000000;"TI;EH.55; MARC;E: 8ʽ7,7542;9ʽ2#SEMICOLON#,4)"2015-03-03 12:25:25.0;2016-03-10 09:13:35.0 

正确的结果应该是:

003628;164332;BICICLETA;000000;"TI#SEMICOLON#EH.55#SEMICOLON# MARC#SEMICOLON#E: 8ʽ7,7542#SEMICOLON#9ʽ2#SEMICOLON#,4)"2015-03-03 12:25:25.0;2016-03-10 09:13:35.0 

我的代码有什么问题?我无法弄清楚。

回答

0

您无需正则表达式实现这一如下:

String cad = "003628;164332;BICICLETA;000000;\"TI;EH.55; MARC;E: 8ʽ7,7542;9ʽ2;,4)\"2015-03-03 12:25:25.0;2016-03-10 09:13:35.0"; 
    String[] array = cad.split("\""); 
    for(int j = 1; j<array.length; j+=2) 
    { 
     array[j] = array[j].replaceAll(";", "#SEMICOLON#"); 
    } 
    System.out.println(String.join("", array)); 

结果:

003628; 164332; BICICLETA; 000000; TI#SEMICOLON#EH.55#SEMICOLON#MARC#SEMICOLON#E: 8'7,7542#SEMICOLON#9'2#SEMICOLON#,4)2015-03-03 12:25:25.0; 2016-03-10 09:13:35.0

+0

谢谢!,但这只适用于这种情况。 在另一种情况下将失败,例如: 25674; 1530; 7; OE00358EST165 ;;“(5; A; XXE:1'3,33; 8'2; 2)”; M535i/1,0; 0; 23/06/2008; 15/12/2015 –

+0

嗯,它适用于我“25674; 1530; 7; OE00358EST165 ;;”(5; A; XXE:1'3,33; 8'2;,2)“; M535i/1 ; 0; 0; 23/06/2008; 15/12/2015" ;将产生25674; 1530; 7; OE00358EST165 ;;(5#SEMICOLON#A#SEMICOLON#XXE:1'3,33#SEMICOLON#8'2#SEMICOLON#,2); M535i/1; 0; 0; 23/06/2008; 15/12/2015 –