我在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";
我希望将其分割并获得如下的分割术语;
我尝试了几种方法来解决这个问题,例如Pattern / Matcher和split(“,”)[]等。 但是,我找不到答案..
答案 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("\"", ""));
}
}
输出:
但是,请使用像OpenCSV这样的库。