如何在 Java 中拆分此字符串? [复制]

Posted

技术标签:

【中文标题】如何在 Java 中拆分此字符串? [复制]【英文标题】:How can i split this string in Java? [duplicate] 【发布时间】: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";

我想拆分它并得到如下拆分的术语;

    视黄醇 3,7,11,15-四甲基-2,4,6,10,14-十六碳五烯酸 C034534 81485-25-8 肝细胞癌 网格:D006528 癌症|消化系统疾病 (无) 17270033 治疗性

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

【问题讨论】:

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

输出:

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

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

【讨论】:

非常感谢先生。它对我帮助很大!再次感谢您,先生。

以上是关于如何在 Java 中拆分此字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中将数字字符串拆分为数组? [复制]

如何在android和java中将字符串拆分为句子? [复制]

如何使用分隔符数组在 Java 中使用多个分隔符拆分字符串? [复制]

如何拆分字符串但在java中保留分隔符? [复制]

如何在Java中使用分隔符在所有大写单词之后拆分字符串?

如何在python中拆分具有多个分隔符的字符串? [复制]