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

如果我的分割阈值为2,则需要将其分割为

ABC1,ABCD2
A1,A234B456
C1

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

我正在尝试找出执行此操作的Java正则表达式。我尝试签出StringUtils API,但没有运气。

最佳答案

您可以使用以下正则表达式:

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


其中2threshold - 1

RegEx Demo1

RegEx Demo2

输出:

threshold3时:

ABC1,ABCD2,A1
A234B456,C1


threshold2时:

ABC1,ABCD2
A1,A234B456
C1


码:

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

10-06 05:45