java - 是否有一个 Java 库可以从数字列表中创建数字范围?

标签 java range

我正在创建一个目录,我拥有的是产品编号到页面的映射。因此条目可能如下所示:

ABC123 => [59, 58, 57, 19, 36, 15, 33, 34, 13, 39, 11, 37, 38, 21, 20, 40, 63, 60, 45, 46, 22, 23, 24, 26, 3, 2, 10, 1, 7, 6, 5, 4, 8]

我想从中得到的是:

1-8,10,11,13,15,19-24,26,33,34,36-38,40,45,46,57-60

我当然可以编写这个代码,但我认为其他人已经解决了这个问题。我的谷歌搜索毫无结果。

一如既往地感谢您提供的任何帮助!

最佳答案

您可以将数字收集到排序集中,然后迭代这些数字。

快速而肮脏的例子:

SortedSet<Integer> numbers = new TreeSet<Integer>();

numbers.add( 1 );
numbers.add( 2 );
numbers.add( 3 );
numbers.add( 6 );
numbers.add( 7 );
numbers.add( 10 );

Integer start = null;
Integer end = null;

for( Integer num : numbers ) {
  //initialize
  if( start == null || end == null ) {
    start = num;
    end = num;
  }
  //next number in range
  else if( end.equals( num - 1 ) ) {
    end = num;
  }
  //there's a gap
  else  {
    //range length 1
    if( start.equals( end )) {
      System.out.print(start + ",");
    }
    //range length 2
    else if ( start.equals( end - 1 )) {
      System.out.print(start + "," + end + ",");
    }
    //range lenth 2+
    else {
      System.out.print(start + "-" + end + ",");
    }

    start = num;
    end = num;
  }
}

if( start.equals( end )) {
  System.out.print(start);
}
else if ( start.equals( end - 1 )) {
  System.out.print(start + "," + end );
}
else {
  System.out.print(start + "-" + end);
}

产量:1-3,6,7,10

关于java - 是否有一个 Java 库可以从数字列表中创建数字范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5744572/

相关文章:

C# 8 从字符串中获取最后 n 个字符的方法

excel - 用数据填充范围

java - 如何测试用户的输入以查看其单词是否在指定范围内

java - 如何访问Android设备上的剪贴板

java - BST 不是抽象的,不会重写 TreeGT 中的抽象方法 height()

Firefox + greasemonkey 中的 Javascript 文本范围

regex - Perl6 : how to use <alpha> in user-defined character class or range?

包内的 Java 接口(interface)和类组织约定

java - 在 Clojure 中强制垃圾收集是个好主意吗?

html - 如何使 CSS 输入范围拇指一开始不出现