使用Java将一个数组转换成连续的字符串
使用Java语言将archiveNumbers=["XJ-2014-0072","XJ-2014-0073","XJ-2013-0037"]数组中的内容最终形成XJ-2013-0037,XJ-2014-0072~0073。
该怎么做呢
public static String formatArchiveNumbers(String[] archiveNumbers) {
if (archiveNumbers == null || archiveNumbers.length == 0) {
return "";
}
// 排序数组,以便连续的编号在一起
Arrays.sort(archiveNumbers);
StringBuilder result = new StringBuilder();
String prefix = archiveNumbers[0].substring(0, archiveNumbers[0].lastIndexOf('-'));
int startNumber = Integer.parseInt(archiveNumbers[0].substring(archiveNumbers[0].lastIndexOf('-') + 1));
int endNumber = startNumber;
for (int i = 1; i < archiveNumbers.length; i++) {
if (archiveNumbers[i].startsWith(prefix)) {
int currentNumber = Integer.parseInt(archiveNumbers[i].substring(archiveNumbers[i].lastIndexOf('-') + 1));
if (currentNumber == endNumber + 1) {
// 连续编号,更新结束编号
endNumber = currentNumber;
} else {
// 不连续编号,添加范围到结果,并更新开始和结束编号
if (startNumber == endNumber) {
result.append(prefix).append('-').append(startNumber).append(", ");
} else {
result.append(prefix).append('-').append(startNumber).append('~').append(endNumber).append(", ");
}
startNumber = currentNumber;
endNumber = currentNumber;
}
} else {
// 前缀变化,添加范围到结果,并更新前缀、开始和结束编号
if (startNumber == endNumber) {
result.append(prefix).append('-').append(startNumber).append(", ");
} else {
result.append(prefix).append('-').append(startNumber).append('~').append(endNumber).append(", ");
}
prefix = archiveNumbers[i].substring(0, archiveNumbers[i].lastIndexOf('-'));
startNumber = Integer.parseInt(archiveNumbers[i].substring(archiveNumbers[i].lastIndexOf('-') + 1));
endNumber = startNumber;
}
}
// 处理最后一个范围
if (startNumber == endNumber) {
result.append(prefix).append('-').append(startNumber);
} else {
result.append(prefix).append('-').append(startNumber).append('~').append(endNumber);
}
return result.toString().trim().replaceAll(", $", "");
}通过以上方法就可以实现
public static void main(String[] args) {
String[] archiveNumbers = {"XJ-2014-0072", "XJ-2014-0073", "XJ-2013-0037"};
System.out.println(formatArchiveNumbers(archiveNumbers));
}最后得到的结果为:XG-2013-0037, XG-2014-0072~0073
评论 (0)