首先,请原谅我的语言,而不是母语为英语的人。
我的问题是拆分这样的字符串:
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";
答案 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来使用正则表达式来解决这个问题。根据您的要求,仅在
时拆分字符串使用上述两者的|
并使用
input.split("((?<=[0-9]),)|(,(?=[0-9]))