我的Java webservice的输入是逗号分隔的字符串列表(“ABC1,ABCD2,A1,A234B456,C1”)。
如果我的分割阈值为2,那么我需要将其拆分为
ABC1,ABCD2
A1,A234B456
C1
如果我的分割阈值为3,那么我需要将其拆分为
ABC1,ABCD2,A1
A234B456,C1
我正试图找出一种Java正则表达方式。我试过检查StringUtils API,但没有运气。
答案 0 :(得分:2)
你可以使用这样的正则表达式:
((?:[^,]*,[^,]*|[^,]+){2})(?:,|$)
号码2
为threshold - 1
当threshold
为3
时:
ABC1,ABCD2,A1
A234B456,C1
当threshold
为2
时:
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 :(得分: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);
}
}