例如:Integer[] NoNum ={1,2,3,5,7,8,9,10,13}
输出的结果为 1-3,5,7-10,13
这个简单,写一个状态机搞定:
state 表示状态,0表示开始状态或者前面的是独立的
1表示在连续之中
2表示最后一个
状态迁移图
class Untitled {
public static void main(String[] args) {
int[] NoNum ={1,2,3,5,7,8,9,10,13};
int state = 0;
String result = "";
for (int i = 0; i < NoNum.length; i++)
{
if (i == NoNum.length - 1) state = 2;
if (state == 0)
{
if (NoNum[i + 1] == NoNum[i] + 1)
{
result += Integer.toString(NoNum[i]);
result += "-";
state = 1;
}
else
{
result += Integer.toString(NoNum[i]);
result += ",";
}
}
else if (state == 1)
{
if (NoNum[i + 1] != NoNum[i] + 1)
{
result += Integer.toString(NoNum[i]);
result += ",";
state = 0;
}
}
else
{
result += Integer.toString(NoNum[i]);
}
}
System.out.println(result);
}
}
上机验证结果:
1-3,5,7-10,13
这是递归的做法。
public class Main {
public static void main(String[] args) {
Integer[] NoNum = {1, 2, 3, 5, 7, 8, 9, 10, 13};
String result = convert(NoNum, 0);
System.out.println(result.substring(0, result.length() - 1));
}
public static String convert(Integer[] ints, int index) {
int end = index;
if (ints.length == index) {//结束条件,遍历完数组
return "";
} else {
for (int i = index; i < ints.length; i++) {
if (i < ints.length - 1) {
if (ints[i] + 1 == ints[i + 1]) {
end = i;
} else {
if (i > index)
end = end + 1;
break;
}
} else {
if (end == ints.length - 2) {
end = ints.length - 1;
break;
}
}
}
if (index == end)//相等说明不连续
return ints[index] + "," + convert(ints, end + 1);
else//连续
return ints[index] + "-" + ints[end] + "," + convert(ints, end + 1);
}
}
}