最近在工作中遇到了一个字符串的压缩问题,
输入的字符串是这样的:
1,2,3,5,6,7,8
对于上面的字符串,输出要求是这样的:
1-3,5-8
输入的字符串中,数字是不会重复的,这是前提。
下面简单的实现了一下
主要方法,压缩
public static String compressCounterNo(String serviceCounter) {
List<String> list = sortList(serviceCounter);
StringBuilder strb = new StringBuilder();
strb.append(list.get(0));
for (int i = 1; i < list.size(); i++) {
int now = Integer.parseInt(list.get(i));
int before = Integer.parseInt(list.get(i - 1));
if (now - before > 1) {
strb.append(",");
strb.append(list.get(i));
} else {
if (i + 1 < list.size()) {
int after = Integer.parseInt(list.get(i + 1));
if (after - now == 1) {
if (!strb.toString().endsWith("-")) {
strb.append("-");
}
} else if (strb.toString().endsWith("-")) {
strb.append(list.get(i));
} else {
strb.append(",");
strb.append(list.get(i));
}
} else {
if (!strb.toString().endsWith("-")) {
strb.append(",");
}
strb.append(list.get(i));
}
}
}
return strb.toString();
}
工具方法,排序
public static List<String> sortList(String serviceCounter) {
List<String> list = new ArrayList<String>();
String[] array = serviceCounter.split(",");
if (array == null || array.length == 0) {
return list;
}
for (String str : array) {
if (str.trim().length() != 0) {
list.add(str);
}
}
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
int i1;
int i2;
try {
i1 = Integer.parseInt(o1);
i2 = Integer.parseInt(o2);
} catch (NumberFormatException e) {
return 0;
}
return i1 - i2;
}
});
return list;
}