如何在给定数字中,将带有逗号的数字与缺失数字分离?

3
我试图获得这个输出,但是无法将缺失的数字用逗号“,”分隔开来。
Input: 1, 2, 3, 4.. 9, 10,13.. 17, 18, 19.. 25 
Output: 1 2 3 4 5 6 7 8 9 10 13 14 15 16 17 18 19 20 21 22 23 24 25

输入中的10,13是否缺少空格还是实际就是这样的? - Arun Sudhakaran
1个回答

2
这里有一个可以实现你需要功能的可行方案,以下是代码解释:

public static String getCSV(int start, int end) {
    List<String> list = IntStream.range(start, end).boxed()
       .map(i -> i.toString()).collect(Collectors.toList());
    String csv = String.join(" ", list);

    return csv;
}

public static void main(String args[])
{
    String input = "1, 2, 3, 4.. 9, 10,13.. 17, 18, 19.. 25";
    input = input.replaceAll(",\\s*", " ");
    Pattern r = Pattern.compile("(\\d+)\\.\\.\\s*(\\d+)");
    Matcher m = r.matcher(input);
    StringBuffer stringBuffer = new StringBuffer();
    while (m.find( )) {
        int start = Integer.parseInt(m.group(1));
        int end = Integer.parseInt(m.group(2));
        m.appendReplacement(stringBuffer, getCSV(start, end+1));
    }
    System.out.println(stringBuffer);
}

输出:

1 2 3 4 5 6 7 8 9 10 13 14 15 16 17 18 19 20 21 22 23 24 25

这种方法使用正则表达式匹配器来识别所有连续的数字对(例如4.. 9),然后将其替换为从起始点到结束点的以空格分隔的连续范围。Java 8流在这里非常方便,而getCSV()方法生成一个包含起始和结束输入值序列的字符串。然后,我们只需要迭代整个输入,并使用帮助方法替换每个连续的数字对。

Demo


下投票者:测试和运行的代码是否值得被踩? - Tim Biegeleisen
你正在帮他做作业。OP尝试了什么,他没有提到。 - Saif Ahmad
@lalreddyp,我很乐意帮助你,但下次在这里提问时,请包含你的代码并尝试突出你卡住的地方。 - Tim Biegeleisen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接