如何动态地将逗号分隔的字符串拆分为在第n个逗号上拆分的字符串数组?

时间:2014-08-21 14:10:27

标签: java regex

我的Java webservice的输入是逗号分隔的字符串列表(“ABC1,ABCD2,A1,A234B456,C1”)。

如果我的分割阈值为2,那么我需要将其拆分为

ABC1,ABCD2
A1,A234B456
C1

如果我的分割阈值为3,那么我需要将其拆分为
ABC1,ABCD2,A1
A234B456,C1

我正试图找出一种Java正则表达方式。我试过检查StringUtils API,但没有运气。

4 个答案:

答案 0 :(得分:2)

你可以使用这样的正则表达式:

((?:[^,]*,[^,]*|[^,]+){2})(?:,|$)

号码2threshold - 1

RegEx Demo1

RegEx Demo2

输出:

threshold3时:

ABC1,ABCD2,A1
A234B456,C1

threshold2时:

ABC1,ABCD2
A1,A234B456
C1

<强> CODE:

int threshold = 3;
String str = "piid1,piid2,piid3,piid4,piid5";
Pattern p = Pattern.compile("((?:[^,]*,[^,]*|[^,]+){" + (threshold-1) + "})(?:,|$)");
Matcher m  = p.matcher(str);
while (m.find()) {
    System.out.println(m.group(1));
}

<强>输出:

piid1,piid2,piid3
piid4,piid5

答案 1 :(得分:0)

这可以达到阈值 2

的工作
(?:,[^,]*){1}(,)

Regular expression visualization

Debuggex Demo

对于阈值 3 ,将{1}更改为{2},因此它始终是所需的阈值 - 1

答案 2 :(得分:0)

这是非注册码,

List<String> result = new ArrayList<String>();

String temp = "";

for (int i = 0; i < splits.length; i++) {                         

    if (threshold > i%threshold) 
        temp = temp + (temp.length() > 0 ? "," : "") + splits[i];

    if (threshold - 1 == i%threshold) {
        result.add(temp);
        temp = "";
    }                                         
}

if (temp != "")  //in the case of threshold == split length 
    result.add(temp); //to add last temp

for (String string : result) {
    System.out.println(string);
}

答案 3 :(得分:0)

我试过这个非正则表达式

if (threshold != 0) { List<String> result = new ArrayList<String>();
StringBuilder sb = new StringBuilder(); int len = listarr.length; for(int i = 1; i <= listarr.length; i++) { if (i % threshold != 0) { sb.append(listarr[i - 1]); if ( i != len) { sb.append(","); } } else { sb.append(listarr[i - 1]); result.add(sb.toString()); sb.setLength(0); } } result.add(sb.toString()); for (String string : result) { System.out.println(string); }
}