java - 将数组 ( String[] ) 表示为带有范围的字符串 CSV

标签 java arrays string

我有一个字符串数组,其中包含用任意数量的零填充的数字(无符号整数),例如:

[ 0001, 0002, 0003, 0005,0007, 0010,0011,0012,0013,0014, 0015 ]

我想将数组转换为表示字符串,表示字符串应使用范围表示( 0000-0003 )聚合相邻值,并将非相邻值聚合为逗号分隔值,例如上面的字符串数组应表示为以下表示字符串:

0001-0003, 0005, 0007, 0010-0015

最好/最简单/更易读的方法是什么(无需编写大量代码:-))?

谢谢。

最佳答案

如果我正确理解了要求,那么以下代码应该适合您:(希望它不是真正的大量代码:-))

String[] arr = new String[] {"0001", "0020", "0002", "0003", "0019", "0005", "0007",
                             "0010", "0018", "0011", "0012", "0013", "0014", "0015"};
Map<Integer, String> m = new TreeMap<Integer, String>();
for (String s : arr)
    m.put(new Integer(s), s);
Iterator<Entry<Integer, String>> it;
Integer prev = -1;
StringBuffer sb = new StringBuffer();
boolean isCont = false;
for (it=m.entrySet().iterator(); it.hasNext();) {
    Entry<Integer, String> entry = it.next();
    if (prev == -1)
        sb.append(entry.getValue());
    else if (entry.getKey() == (prev+1))
        isCont = true;
    else if (entry.getKey() > (prev+1)) {
        if (isCont)
            sb.append('-').append(m.get(prev)).append(", ");
        else
            sb.append(", ");
        sb.append(entry.getValue());
        isCont = false;
    }
    prev = entry.getKey();
}
if (isCont)
    sb.append('-').append(m.get(prev));
System.out.println(sb);

输出:

0001-0003, 0005, 0007, 0010-0015, 0018-0020

关于java - 将数组 ( String[] ) 表示为带有范围的字符串 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9070505/

相关文章:

c - 如果 a 是数组,函数 (1,a+2) 中的加法是什么意思?

python解析csv文件

java - hibernate 搜索 : what is the purpose of static block calling Version#touch()

java - getLatitudeE6() 返回错误值

c - 指向一维数组的双指针

c# - StringComparison.InvariantCulture 澄清?

string - 如何将uint64转换为字符串

java - GUI项目协助

java - 如何正确更新SQLite?

c++ - 在循环外存储 C++ 数组