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

如何在Java中拆分此字符串?,java,regex,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"; 我想拆分它,得到如下拆分的术语: 视黄醇 3,7,11,15-四甲基-2

我在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
  • 治疗性
  • 我尝试了几种方法来解决这个问题,例如模式/匹配器和拆分(“,”[)等。。
    但是,我找不到答案。

    如评论中所述,由于您正在解析CSV文件,因此需要使用专门为解析CSV而编写的库。否则,你将继续遇到问题,你写的东西“当不同的模式出现时是无用的”(正如你所说)

    然而,要解决手头的问题,你只需要在逗号上拆分,忽略引号中的逗号。因此,您可以(从以下位置)执行此操作:

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

    视黄醇
    “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
  • 治疗性

  • 但是,请使用一个库,如注释中所述。

    ,因为您要解析CSV文件,所以需要使用专门为解析CSV编写的库。否则,你将继续遇到问题,你写的东西“当不同的模式出现时是无用的”(正如你所说)

    然而,要解决手头的问题,你只需要在逗号上拆分,忽略引号中的逗号。因此,您可以(从以下位置)执行此操作:

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

    视黄醇
    “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
  • 治疗性

  • 但是,请使用一个库,如注释中所述。

    ,因为您要解析CSV文件,所以需要使用专门为解析CSV编写的库。否则,你将继续遇到问题,你写的东西“当不同的模式出现时是无用的”(正如你所说)

    然而,要解决手头的问题,你只需要在逗号上拆分,忽略引号中的逗号。因此,您可以(从以下位置)执行此操作:

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

    视黄醇
    “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
  • 治疗性

  • 但是,请使用一个库,如注释中所述。

    ,因为您要解析CSV文件,所以需要使用专门为解析CSV编写的库。否则,你将继续遇到问题,你写的东西“当不同的模式出现时是无用的”(正如你所说)

    然而,要解决手头的问题,你只需要在逗号上拆分,忽略引号中的逗号。因此,您可以(从以下位置)执行此操作:

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

    视黄醇
    “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
  • 治疗性

  • 但是,请使用类似的库。

    您可以在问题中使用pattern/matcher和split发布这些尝试吗?根据@Jerry的评论-您必须发布您尝试的解决方案并询问有关这些问题的问题-您不能要求此场景的用户为您工作。看起来像标准CSV,否?那么您最好使用库为您解析CSV。您最好(从长远来看)尝试一个专门为解析CSV而编写的库,例如。你可以用一种“快速而直接的方式”也许是形式上的,但它可能并不总是适用于你所有的数据。你能用pattern/matcher和split在你的问题中发布这些尝试吗?根据@Jerry的评论-你必须发布你尝试的解决方案并询问quest