如何在Java中拆分此字符串?

时间:2013-12-31 17:58:05

标签: java regex

我在Java中分割句子时遇到问题

输入字符串:

"retinol,\"3,7,11,15-tetramethyl-2,4,6,10,14-hexadecapentaenoic acid\",C034534,81485-25-8,\"Carcinoma, Hepatocellular\",MESH:D006528,Cancer|Digestive system disease,,17270033,therapeutic";

我希望将其分割并获得如下的分割术语;

  1. 视黄醇
  2. 3,7,11,15-四甲基-2,4,6,10,14-十六碳五烯酸
  3. C034534
  4. 81485-25-8
  5. 癌,肝细胞
  6. MESH:D006528
  7. 癌症|消化系统疾病
  8. (无)
  9. 17270033
  10. 治疗
  11. 我尝试了几种方法来解决这个问题,例如Pattern / Matcher和split(“,”)[]等。 但是,我找不到答案..

1 个答案:

答案 0 :(得分:3)

正如评论中所讨论的,由于您正在解析CSV文件,因此您将需要使用专门用于解析CSV的库。否则你会继续遇到问题,你写的东西“当一个不同的模板出来时没用”(如你所说)。

但是,要解决手头的问题,你只需要用逗号分隔,忽略引号内的逗号。所以你可以这样做(来自this answer):

String input = "retinol,\"3,7,11,15-tetramethyl-2,4,6,10,14-hexadecapentaenoic acid\",C034534,81485-25-8,\"Carcinoma, Hepatocellular\",MESH:D006528,Cancer|Digestive system disease,,17270033,therapeutic";
String[] output = input.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");

for(String s : output){
    System.out.println(s);
}

这将为您提供此输出(请注意引号和空行):

视黄醇
“3,7,11,15-四甲基-2,4,6,10,14-十六碳五烯酸”
C034534
81485-25-8
“癌,肝细胞”
MESH:D006528
癌症|消化系统疾病

17270033
治疗

您可以根据需要替换引号并忽略空行。此循环将打印问题中请求的确切输出:

int i=1;
for(String s : output){
    if(!s.isEmpty()){
        System.out.println(i++ + ". " + s.replace("\"", ""));
    }
}

输出:

  1. 视黄醇
  2. 3,7,11,15-四甲基-2,4,6,10,14-十六碳五烯酸
  3. C034534
  4. 81485-25-8
  5. 癌,肝细胞
  6. MESH:D006528
  7. 癌症|消化系统疾病
  8. 17270033
  9. 治疗
  10. 但是,请使用像OpenCSV这样的库。