如何在 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 中拆分此字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在android和java中将字符串拆分为句子? [复制]