使用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)
说点什么吧... (取消回复)