【问题标题】:How can i split this string in Java? [duplicate]如何在 Java 中拆分此字符串? [复制]
【发布时间】:2014-01-18 15:08:00
【问题描述】:

我在用 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. 网格:D006528
  7. 癌症|消化系统疾病
  8. (无)
  9. 17270033
  10. 治疗性

我尝试了几种方法来解决这个问题,例如 Pattern/Matcher 和 split(",")[] 等。 但是,我找不到答案..

【问题讨论】:

  • 你能用模式/匹配器发布这些尝试并在你的问题中拆分吗?
  • 根据@Jerry 的评论 - 您必须发布您尝试过的解决方案并就这些问题提出问题 - 您不能要求该场景的用户为您完成工作。
  • 看起来像标准 CSV,不是吗?
  • 那么最好的办法就是使用库为您解析 CSV。 See this question.
  • 您最好的选择(从长远来看)是尝试专门为解析 CSV 编写的库,例如 OpenCSV。您可以使用this 形式的“快速而肮脏的方式”,但它可能并不总是适用于您的所有数据。

标签: java regex


【解决方案1】:

正如 cmets 中所讨论的,由于您正在解析 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
“癌,肝细胞”
网目: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. 网格:D006528
  7. 癌症|消化系统疾病
  8. 17270033
  9. 治疗性

但是,请使用像 OpenCSV 这样的库。

【讨论】:

  • 非常感谢先生。它对我帮助很大!再次感谢您,先生。
猜你喜欢
  • 1970-01-01
  • 2014-09-22
  • 1970-01-01
  • 1970-01-01
  • 2019-10-03
  • 2017-09-22
  • 1970-01-01
相关资源
最近更新 更多