判断String字符串中是否有连续的数字,有连续的就缩写(比如:String str="1,2,3,7,10,11,12,13,14,15" 变为"1-3,7-7,10-15")

			string newList="";
			string str="1,2,3,7,10,11,12,13,14,15";//string字符串
			int min;
            int max;
            if (str!=null&&str.Length>0) { 
                string[] strArr = str.Split(',');//将string字符串转化为string数组
                //将string数组转化为int数组
                int[] Arr = new int[strArr.Length];
                for (int i = 0; i <strArr.Length; i++)
                {
                    Arr [i] = Convert.ToInt32(strArr[i].ToString());
                }
                //先将缩写时-两端的数字min-max都设为Arr[0]
                min = Arr[0];
                max = Arr[0];
                //再遍历int数组
                for (int i = 0; i < Arr.Length;)
                {
                	//比较相邻两个数是否为连续
                   int j = i + 1;
                   if (j >= Arr.Length) j=i;//注意:因为j=i+1,所以j会出现超出数组下标范围的情况
                   //先比较第一个和第二个,如果连续,再比较第二个和第三个...直到出现不连续时就输出缩写1-3,再进行下面数字的比较
                   if (Arr[i] == (Arr[j] - 1))//如果连续,就先暂时把Arr[j]赋值给-右侧的数字
                   {
                       max = Arr[j];
                       i = j;
                   }
                   else {
                       if (i == Arr.Length - 1)
                       {
                           newList += min + "-" + max;//如果没有这个判断最后会输出newlist="1-3,7-7,10-15,"会多一个‘,’
                       }
                       else
                       {
                           newList += min + "-" + max + ",";
                       }
                       i = i + 1;//将3变为7,7与后面的数字比较
                       //此时将min和max都赋值为7
                       if (i < Arr.Length)
                       {
                           min = Arr[i];
                           max = Arr[i];
                       }
                   }
                }
           }
           return newList;//newlist="1-3,7-7,10-15"

猜你喜欢

转载自blog.csdn.net/qq_40253245/article/details/85338738