Java - 在Data中使用String.split(,)拆分String

时间:2015-06-24 23:05:10

标签: java string split string-parsing

首先,请原谅我的语言,而不是母语为英语的人。

我的问题是拆分这样的字符串:

String input = "39929,ABCD,623,353,9643030,12154,0";
分为7件。我试着用

input.split("\\,");

ABCD 部分也可以包含

  

此外,我必须解析大约1 mio线,我听说正则表达式有点慢。

编辑: 不寻常的输入:

String input = "39929,A,C,,623,353,9643030,12154,0";

代替" ABCD" - " A,C,"

这就是我想要的:

String part1: "39929";
String part2: "A,C,";
String part3: "623";
String part4: "353";
String part5: "9643030";
String part6: "12154";
String part7: "0";

3 个答案:

答案 0 :(得分:0)

虽然这不是一个非常干净的任务(主要来自编码不良的输入 1 ),但一种方法是使用regular expression捕获:

^(\d+),(.*),(\d+),(\d+),(\d+),(\d+),(\d+)$

然后"余下的,' s"将在第二个捕获组中,其他组保留其他值。锚点确保它是吸收'的第二组。逗号。

其他方法包括在找到索引后进行过分割/重组和第一次/溢出/最后一段提取。

1 "正确" CSV变体允许嵌入逗号,通常通过允许引号。如果可能的话,最好采用/使用其中一个以及CSV处理库。

答案 1 :(得分:0)

这是一个解决方案。请记住,我没有测试过,但你可以从中得到一些想法。

String input = "39929,ABCD,623,353,9643030,12154,0";
        java.util.List<String> result = new java.util.ArrayList<String>();
        int index = input.indexOf(',', 0), prev = 0;
        while(index != -1) {
            if(Character.toString(input.charAt(index - 1)).matches("[\\d]")) {//a number
                 result.add(input.substring(prev, index));
                 prev = index + 1;
            } 


            index = input.indexOf(',', index + 1);
        }
        result.add(input.substring(prev));

答案 2 :(得分:0)

你可以使用lookahead和lookbehind regex来使用正则表达式来解决这个问题。根据您的要求,仅在

时拆分字符串
  1. 逗号前面有一个数字=&gt; ((小于?= [0-9]))
  2. 逗号后跟一个数字=&gt; (,(= [0-9]))
  3. 使用上述两者的|并使用

    拆分字符串

    input.split("((?<=[0-9]),)|(,(?=[0-9]))